SamsonsForge.GenericServiceScopeFactory
2.0.0
dotnet add package SamsonsForge.GenericServiceScopeFactory --version 2.0.0
NuGet\Install-Package SamsonsForge.GenericServiceScopeFactory -Version 2.0.0
<PackageReference Include="SamsonsForge.GenericServiceScopeFactory" Version="2.0.0" />
<PackageVersion Include="SamsonsForge.GenericServiceScopeFactory" Version="2.0.0" />
<PackageReference Include="SamsonsForge.GenericServiceScopeFactory" />
paket add SamsonsForge.GenericServiceScopeFactory --version 2.0.0
#r "nuget: SamsonsForge.GenericServiceScopeFactory, 2.0.0"
#:package SamsonsForge.GenericServiceScopeFactory@2.0.0
#addin nuget:?package=SamsonsForge.GenericServiceScopeFactory&version=2.0.0
#tool nuget:?package=SamsonsForge.GenericServiceScopeFactory&version=2.0.0
About
This repository and package is intended to smooth the Service Locator anti-pattern by offering a generic service scope factory that can be injected. Specifically, this conveys dependencies at design-time that are pulled out of a service scope. With this, it makes testing a bit easier.
Sometimes, it can be preferable or necessary to inject a service scope factory and resolve services from it. However, it should not be the preferred method. See the Microsoft recommendations.
Using
- Import the namespace
SamsonsForge.GenericServiceScopeFactory - Register the factory to the service container with either
the built in registrar
services.AddGenericServiceScopeFactory();
or manually with
services.AddSingleton(typeof(IServiceScopeFactory<>), typeof(ServiceScopeFactory<>));
This results in being able to use a generic service scope factory like so
public class MyClass
{
private readonly IServiceScopeFactory<IMyDependency> _myDependencyFactory;
public MyClass(IServiceScopeFactory<IMyDependency> myDependencyFactory)
{
_myDependencyFactory = myDependencyFactory;
}
public void DoThing()
{
using var myDependencyScope = _myDependencyFactory.CreateScope();
var myDependency = scope.ServiceProvider.GetRequiredService();
// Use the dependency.
}
}
Instead of
public class MyClass
{
private readonly IServiceScopeFactory _serviceScopeFactory;
public MyClass(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
public void DoThing()
{
using var scope = _serviceScopeFactory.CreateScope();
var myDependency = scope.ServiceProvider.GetRequiredService<IMyDependency>();
// Use the dependency.
}
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 2.0.0 | 1,940 | 6/8/2021 |
Specify license and downgrade dependency.