【发布时间】:2019-12-06 12:02:47
【问题描述】:
我有课
public TimeSeriesBusinessComponent(IContextRepository contextRepository) { ...
我通过我的类 ServiceExtension 传递依赖项注入,我从 Startup.cs 调用它。
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddRepositories(Configurations);
services.AddBusinessComponents();
服务扩展:
public static void AddRepositories(this IServiceCollection serviceCollection, Configurations con)
{
serviceCollection.AddScoped<IContextRepository>(serviceProvider =>
{
string createContextFunctionName = con.Get(CREATE_CONTEXT_FUNCTION_NAME);
return new ContextRepository(createContextFunctionName);
});
}
public static void AddBusinessComponents(this IServiceCollection serviceCollection)
{
serviceCollection.AddScoped<ITimeSeriesBusinessComponent, TimeSeriesBusinessComponent>();
}
后来我像这样使用我的类 TimeSeriesBusinessComponent:
public class TimeSeriesController : Controller
{
private ITimeSeriesBusinessComponent BusinessComponent { get; }
public TimeSeriesController(
ITimeSeriesBusinessComponent businessComponent
)
{
BusinessComponent = businessComponent;
}
但现在我也需要将一个参数从我的 ServicExtension 转移到我的 TimeSeriesBusinessComponent 中,例如 ..
public TimeSeriesBusinessComponent(IContextRepository contextRepository,. string value) { ...
我从配置中获得的字符串值 (EnvirenmentVariables)。
如何同时使用依赖注入和普通参数?
【问题讨论】:
-
string value参数从何而来?从某种配置或?目前尚不清楚:谁创建了您的TimeSeriesBusinessComponent类的实例:DI 还是您? -
@deezg 我在最初的帖子中添加了信息。
-
如果字符串值是在运行时生成的,您可以简单地引入
Init函数或类似的函数,您可以在其中传递这样的字符串。您可以(或者甚至不应该)混合 DI 和手动实例化。在 autofac 例如可以将 container.Resolve 与 ConstructorParameters 参数一起使用,但即使这种方法也不适用于松散的使用场景
标签: c# asp.net-web-api dependency-injection asp.net-core-webapi