From c8bb4f12612a7aa81b8afdf1ec21e7e5c59bd264 Mon Sep 17 00:00:00 2001 From: Sefa Can Date: Thu, 24 Sep 2020 19:26:58 +0300 Subject: [PATCH 1/2] add self scoped, singleton and transient support --- .vs/Nano.DependencyInjector/v16/.suo | Bin 0 -> 38400 bytes .../DependencyInjectionConfigure.cs | 40 +++++++++++------- .../SelfScopedAttribute.cs | 6 +++ .../SelfSingletonAttribute.cs | 6 +++ .../SelfTransientAttribute.cs | 6 +++ 5 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 .vs/Nano.DependencyInjector/v16/.suo create mode 100644 src/Nano.DependencyInjector/SelfScopedAttribute.cs create mode 100644 src/Nano.DependencyInjector/SelfSingletonAttribute.cs create mode 100644 src/Nano.DependencyInjector/SelfTransientAttribute.cs diff --git a/.vs/Nano.DependencyInjector/v16/.suo b/.vs/Nano.DependencyInjector/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..66f6d275b301096b2f8d02696c0c2bb8714fdab8 GIT binary patch literal 38400 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 bt``3PV>vBC{5z GetDependencies(Assembly assembly) { var dependencies = new List(); - foreach (Type type in assembly.GetTypes()) + foreach (var type in assembly.GetTypes()) { var injectionType = GetInjectionType(type); - - if (!injectionType.HasValue) - { + if (!injectionType.Lifetime.HasValue) continue; - } - dependencies.Add(new DependencyInjectionServiceType() + dependencies.Add(new DependencyInjectionServiceType { - LifeTime = injectionType.Value, + LifeTime = injectionType.Lifetime.Value, ImplementationType = type, - InterfaceType = - type.GetInterfaces()[ - 0] // TODO (peacecwz): Detect multiple interface and interface inject selection + InterfaceType = injectionType.Self ? type : type.GetInterfaces()[0] // TODO (peacecwz): Detect multiple interface and interface inject selection }); } return dependencies; } - private static ServiceLifetime? GetInjectionType(Type type) + private static (ServiceLifetime? Lifetime, bool Self) GetInjectionType(Type type) { if (type.GetCustomAttribute() != null) { - return ServiceLifetime.Singleton; + return (ServiceLifetime.Singleton, false); + } + + if (type.GetCustomAttribute() != null) + { + return (ServiceLifetime.Singleton, true); } if (type.GetCustomAttribute() != null) { - return ServiceLifetime.Scoped; + return (ServiceLifetime.Scoped, false); + } + + if (type.GetCustomAttribute() != null) + { + return (ServiceLifetime.Scoped, true); } if (type.GetCustomAttribute() != null) { - return ServiceLifetime.Transient; + return (ServiceLifetime.Transient, false); + } + + if (type.GetCustomAttribute() != null) + { + return (ServiceLifetime.Transient, true); } - return null; + return (null, false); } } } \ No newline at end of file diff --git a/src/Nano.DependencyInjector/SelfScopedAttribute.cs b/src/Nano.DependencyInjector/SelfScopedAttribute.cs new file mode 100644 index 0000000..ef9ae28 --- /dev/null +++ b/src/Nano.DependencyInjector/SelfScopedAttribute.cs @@ -0,0 +1,6 @@ +// ReSharper disable CheckNamespace +using System; + +public class SelfScopedAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/Nano.DependencyInjector/SelfSingletonAttribute.cs b/src/Nano.DependencyInjector/SelfSingletonAttribute.cs new file mode 100644 index 0000000..75a4260 --- /dev/null +++ b/src/Nano.DependencyInjector/SelfSingletonAttribute.cs @@ -0,0 +1,6 @@ +// ReSharper disable CheckNamespace +using System; + +public class SelfSingletonAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/Nano.DependencyInjector/SelfTransientAttribute.cs b/src/Nano.DependencyInjector/SelfTransientAttribute.cs new file mode 100644 index 0000000..43ed986 --- /dev/null +++ b/src/Nano.DependencyInjector/SelfTransientAttribute.cs @@ -0,0 +1,6 @@ +// ReSharper disable CheckNamespace +using System; + +public class SelfTransientAttribute : Attribute +{ +} \ No newline at end of file From ac7d26a014c659a572c1fc90a63bbaf56d5b4e51 Mon Sep 17 00:00:00 2001 From: Sefa Can Date: Thu, 24 Sep 2020 19:28:04 +0300 Subject: [PATCH 2/2] update .gitignore file --- .gitignore | 649 ++++++++++++++++++++++++++- .vs/Nano.DependencyInjector/v16/.suo | Bin 38400 -> 0 bytes 2 files changed, 643 insertions(+), 6 deletions(-) delete mode 100644 .vs/Nano.DependencyInjector/v16/.suo diff --git a/.gitignore b/.gitignore index f400df3..199c3bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,643 @@ -bin/ -obj/ -/packages/ -riderModule.iml -/_ReSharper.Caches/ -.idea/ \ No newline at end of file + +# Created by https://www.gitignore.io/api/csharp,aspnetcore,visualstudio,visualstudiocode +# Edit at https://www.gitignore.io/?templates=csharp,aspnetcore,visualstudio,visualstudiocode + +### ASPNETCore ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/ + +### Csharp ### +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser + +# User-specific files (MonoDevelop/Xamarin Studio) + +# Mono auto generated files +mono_crash.* + +# Build results +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ + +# Visual Studio 2015/2017 cache/options directory +# Uncomment if you have tasks that create the project's static files in wwwroot + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results + +# NUNIT + +# Build Results of an ATL Project + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_h.h +*.iobj +*.ipdb +*_wpftmp.csproj + +# Chutzpah Test files + +# Visual C++ cache files + +# Visual Studio profiler + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace + +# Guidance Automation Toolkit + +# ReSharper is a .NET coding add-in + +# JustCode is a .NET coding add-in + +# TeamCity is a build add-in + +# DotCover is a Code Coverage Tool + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results + +# NCrunch + +# MightyMoose + +# Web workbench (sass) + +# Installshield output folder + +# DocProject is a documentation generator add-in + +# Click-Once directory + +# Publish Web Output +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted + +# NuGet Packages +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files + +# Microsoft Azure Build Output + +# Microsoft Azure Emulator + +# Windows Store app package directories and files +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) + +# RIA/Silverlight projects + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.ndf + +# Business Intelligence projects +*.rptproj.rsuser +*- Backup*.rdl + +# Microsoft Fakes + +# GhostDoc plugin setting file + +# Node.js Tools for Visual Studio + +# Visual Studio 6 build log + +# Visual Studio 6 workspace options file + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output + +# Paket dependency manager + +# FAKE - F# Make + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +### VisualStudio ### + +# User-specific files + +# User-specific files (MonoDevelop/Xamarin Studio) + +# Mono auto generated files + +# Build results + +# Visual Studio 2015/2017 cache/options directory +# Uncomment if you have tasks that create the project's static files in wwwroot + +# Visual Studio 2017 auto generated files + +# MSTest test Results + +# NUNIT + +# Build Results of an ATL Project + +# Benchmark Results + +# .NET Core + +# StyleCop + +# Files built by Visual Studio + +# Chutzpah Test files + +# Visual C++ cache files + +# Visual Studio profiler + +# Visual Studio Trace Files + +# TFS 2012 Local Workspace + +# Guidance Automation Toolkit + +# ReSharper is a .NET coding add-in + +# JustCode is a .NET coding add-in + +# TeamCity is a build add-in + +# DotCover is a Code Coverage Tool + +# AxoCover is a Code Coverage Tool + +# Visual Studio code coverage results + +# NCrunch + +# MightyMoose + +# Web workbench (sass) + +# Installshield output folder + +# DocProject is a documentation generator add-in + +# Click-Once directory + +# Publish Web Output +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted + +# NuGet Packages +# The packages folder can be ignored because of Package Restore +# except build/, which is used as an MSBuild target. +# Uncomment if necessary however generally it will be regenerated when needed +# NuGet v3's project.json files produces more ignorable files + +# Microsoft Azure Build Output + +# Microsoft Azure Emulator + +# Windows Store app package directories and files + +# Visual Studio cache files +# files ending in .cache can be ignored +# but keep track of directories ending in .cache + +# Others + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) + +# RIA/Silverlight projects + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) + +# SQL Server files + +# Business Intelligence projects + +# Microsoft Fakes + +# GhostDoc plugin setting file + +# Node.js Tools for Visual Studio + +# Visual Studio 6 build log + +# Visual Studio 6 workspace options file + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) + +# Visual Studio LightSwitch build output + +# Paket dependency manager + +# FAKE - F# Make + +# CodeRush personal settings + +# Python Tools for Visual Studio (PTVS) + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio + +# Telerik's JustMock configuration file + +# BizTalk build output + +# OpenCover UI analysis results + +# Azure Stream Analytics local run output + +# MSBuild Binary and Structured Log + +# NVidia Nsight GPU debugger configuration file + +# MFractors (Xamarin productivity tool) working folder + +# Local History for Visual Studio + +# BeatPulse healthcheck temp database + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 + +# End of https://www.gitignore.io/api/csharp,aspnetcore,visualstudio,visualstudiocode + +[Bb]undles/ \ No newline at end of file diff --git a/.vs/Nano.DependencyInjector/v16/.suo b/.vs/Nano.DependencyInjector/v16/.suo deleted file mode 100644 index 66f6d275b301096b2f8d02696c0c2bb8714fdab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38400 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 bt``3PV>vBC{5z