我有一个通用类Logger<TProvider> where TProvider : ILogProvider
,我想使用Autofac配置依赖项注入。
此类还具有一个构造函数:
public Logger(LogType loggerType)
目前这样使用:
var logger = new Logger<Log4NetLogProvider>(LogType.CMS);
我想知道这是否可能是依赖项注入,还是由于需要类型/构造函数参数而无法实现?
我知道RegisterGeneric
方法,例如:
builder.RegisterGeneric(typeof(Logger<>)).AsSelf()
我想知道如何告诉autofac传入了哪个TProvider
并提供构造函数参数LogType
?还是这不是DI的好候选人?
答案 0 :(得分:0)
注册类型时,您可以尝试使用WithParameter
扩展名
//using named parameter
builder.RegisterGeneric(typeof(Logger<>))
.AsSelf()
.WithParameter("loggerType", LogType.CMS);
//OR - using typed parameter
builder.RegisterGeneric(typeof(Logger<>))
.AsSelf()
.WithParameter(new TypedParameter(typeof(LogType), LogType.CMS));
答案 1 :(得分:0)
我解决您的问题的方式如下:
我在完成通用类的注册。
builder.RegisterGeneric(typeof(Logger<>));
之后,我用如下类型注册它:
builder.RegisterType<Logger<TProvider>>()
.As<ILogger<TProvider>>()
.WithParameter("loggerType", LogType.CMS);
或者您也可以使用Typed参数来做到这一点:
builder.RegisterType<Logger<TProvider>>()
.As<ILogger<TProvider>>()
.WithParameter(TypedParameter.From(LogType.CMS)));
将TProvider替换为参数,即
builder.RegisterType<Logger<LogProvider>>()
.As<ILogger<LogProvider>>()
.WithParameter(TypedParamater.From(LogType.CMS)));