Jos*_*wer 2 dependency-injection simple-injector asp.net-core
我对使用 DI 容器还比较陌生,并且遇到了一些障碍。
SimpleInjector 有一个具有以下签名的方法:
Container.RegisterInitializer<TService>(Action<TService>)
Run Code Online (Sandbox Code Playgroud)
在我们的代码库中,我们确实这样使用它:
// this is a property injection of the abstract file system
container.RegisterInitializer<IFileSystemInjection>(
fs => fs.FileSystem = new FileSystem());
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用 Startup.cs 类中的ConfigureServices 方法中的IServiceCollection 参数来实现相同的目的。到目前为止,我已经能够使用 services.AddTransient(); 注册所有类型。但我不确定 IServiceCollection 中的等效 simpleinjector.RegisterInitializer 是如何的。
AddSingleton您可以使用、AddScoped和的工厂重载AddTransient。我不确定范围IFileSystemInjection应该在什么范围内,但这听起来像是可能是单例的东西。如果没有,请适当更改您调用的方法:
service.AddSingleton<IFileSystemInjection>(p =>
{
var fs = new FileSystemInjection();
fs.FileSystem = new FileSystem();
});
Run Code Online (Sandbox Code Playgroud)
简而言之,如果您提供一个工厂,那么您就负责整个对象初始化,因此new FileSystemInjection()我将其替换为您使用的实际实现IFileSystemInjection。
如果该实现具有需要注入才能创建它的依赖项,您可以从 中提取这些依赖项p,它是 的一个实例IServiceProvider:
var myDep = p.GetRequiredService<MyDep>();
var fs = new FileSystemImplementation(myDep);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3823 次 |
| 最近记录: |