Dependency injection ASP.NET核心和依赖项注入
除此之外,是否有适当的方式来声明我的服务:Dependency injection ASP.NET核心和依赖项注入,dependency-injection,asp.net-core,Dependency Injection,Asp.net Core,除此之外,是否有适当的方式来声明我的服务: services.AddTransient<ILogger>(provider => new Logger(Configuration["..."])); services.AddTransient<ICatalogService>(provider => new CatalogService(Configuration["..."], new Logger(Configuration["..."]))); 及 这
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]));
services.AddTransient<ICatalogService>(provider => new CatalogService(Configuration["..."], new Logger(Configuration["..."])));
及
这应该起作用:
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]))
services.AddTransient<ICatalogService, CatalogService>();
由于您已经注册了ILogger的实现,IOC将自动创建一个实例以在CatalogService
类中使用
编辑:基于您的版本,无需每次都注入新的配置。只需为您的i配置注册实现
,它将在需要时自动注入。我没有测试过,但应该是这样的:
public class CatalogService(ILogger logger) {
...
}
services.AddSingleton<IConfiguration>(Configuration);
services.AddTransient<ILogger, Logger>()
services.AddTransient<ICatalogService, CatalogService>()
services.AddSingleton(配置);
services.AddTransient()
services.AddTransient()
顺便说一下,我可以帮你。这应该可以:
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]))
services.AddTransient<ICatalogService, CatalogService>();
由于您已经注册了ILogger的实现,IOC将自动创建一个实例以在CatalogService
类中使用
编辑:基于您的版本,无需每次都注入新的配置。只需为您的i配置注册实现
,它将在需要时自动注入。我没有测试过,但应该是这样的:
public class CatalogService(ILogger logger) {
...
}
services.AddSingleton<IConfiguration>(Configuration);
services.AddTransient<ILogger, Logger>()
services.AddTransient<ICatalogService, CatalogService>()
services.AddSingleton(配置);
services.AddTransient()
services.AddTransient()
顺便说一句,它可以帮助您。您应该尽可能使用
IOption
模式,有关更多信息,请参阅
如果无法使用IOptions
模式(即在第三方库或不支持此模式的传统库中定义的记录器),则可以在工厂方法中解析记录器
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]));
services.AddTransient<ICatalogService>(provider => new CatalogService(Configuration["..."], provider.GetService<ILogger>()));
services.AddTransient(provider=>newlogger(配置[“…”]);
services.AddTransient(provider=>newcatalogservice(配置[“…”],provider.GetService());
通过这种方式,将从先前配置的配置中解析记录器。这就是将
提供程序
传递到工厂方法的原因。您应该尽可能使用IOption
模式,请参阅以了解更多信息
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]));
services.AddTransient<ICatalogService>(provider => new CatalogService(Configuration["..."], provider.GetService<ILogger>()));
如果无法使用IOptions
模式(即在第三方库或不支持此模式的传统库中定义的记录器),则可以在工厂方法中解析记录器
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]));
services.AddTransient<ICatalogService>(provider => new CatalogService(Configuration["..."], provider.GetService<ILogger>()));
services.AddTransient(provider=>newlogger(配置[“…”]);
services.AddTransient(provider=>newcatalogservice(配置[“…”],provider.GetService());
通过这种方式,将从先前配置的配置中解析记录器。这就是将
提供程序
传递到工厂方法的原因。对不起,我的问题不够精确。我补充说precsions@Tim:分别注册您的配置
。您的意思是使用IOOptions模式?对不起,我的问题不够精确。我补充说precsions@Tim:分别注册您的配置
。您的意思是使用IOOptions模式?看起来很棒,我不知道!看起来很棒,我不知道!
services.AddTransient<ILogger>(provider => new Logger(Configuration["..."]));
services.AddTransient<ICatalogService>(provider => new CatalogService(Configuration["..."], provider.GetService<ILogger>()));