asp.net-core - Microsoft.Extensions.DependencyInjection 中的属性注入(inject)

标签 asp.net-core dependency-injection simple-injector

我对使用 DI 容器还比较陌生,遇到了一些障碍。

SimpleInjector 有一个具有以下签名的方法:

Container.RegisterInitializer<TService>(Action<TService>)

在我们的代码库中,我们确实是这样使用它的:

// this is a property injection of the abstract file system
container.RegisterInitializer<IFileSystemInjection>(
    fs => fs.FileSystem = new FileSystem());

我想知道如何使用 Startup.cs 类的 ConfigureServices 方法中的 IServiceCollection 参数实现相同的目的。到目前为止,我已经能够使用 services.AddTransient(); 注册我所有的类型。但我不确定 IServiceCollection 中等效的 simpleinjector.RegisterInitializer 是什么。

最佳答案

您将使用 AddSingletonAddScopedAddTransient 的工厂重载。我不确定 IFileSystemInjection 应该在什么范围内,但它听起来可能是一个单例。如果不是,请适当更改您调用的方法:

service.AddSingleton<IFileSystemInjection>(p =>
{
    var fs = new FileSystemInjection();
    fs.FileSystem = new FileSystem();
});

简而言之,如果您提供一个工厂,那么您将负责整个对象的初始化,因此是 new FileSystemInjection(),我将其替换为 的实际实现IFileSystemInjection 你的使用。

如果该实现具有需要注入(inject)的依赖项才能创建它,您可以从 p 中提取这些依赖项,它是 IServiceProvider 的一个实例:

var myDep = p.GetRequiredService<MyDep>();
var fs = new FileSystemImplementation(myDep);

关于asp.net-core - Microsoft.Extensions.DependencyInjection 中的属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57379247/

相关文章:

c# - 身份服务器 4 : How so you include additional claims and get the value in an API controller?

logging - 如何让注入(inject)的记录器在 grails 中工作?

php - 如何在不牺牲依赖注入(inject)的情况下简化 API?

dependency-injection - 温莎跟踪我的 transient 对象

c# - 使用 Owin 和简单注入(inject)器进行 UserManager 依赖注入(inject)

c# - MVC ICollection<IFormFile> ValidationState 始终设置为 Skipped

c# - 在 Controller 和 ActionFilter 之外获取 ModelState

razor - 在多个 asp.net core 项目中使用单个布局页面

c# - 如何使用 Simple Injector 注册 Windows 窗体

c# - 验证过程中如何清理 SimpleInjector 创建的实例?