我正在研究一个严重需要重构SOLID原则的遗留代码库。我们正在将Simple Injector依赖注入容器添加到混合中作为第一步。
对于其中一个注册,我需要的东西非常类似于Log4Net的RegisterConditional例子,即:
container.RegisterConditional(
typeof(ILogger),
c => typeof(Logger<>).MakeGenericType(c.Consumer.ImplementationType),
Lifestyle.Singleton,
c => true);
区别在于我想要注入一个以c.Consumer.ImplementationType作为输入的工厂方法返回的实例:
container.Register???(
typeof(ILogger),
c => LoggerProvider.GetLogger(c.Consumer.ImplementationType),
Lifestyle.Transient);
这可以在Simple Injector中完成吗?
我已经阅读了a similar question的答案,但这还不够。需要将ImplementationType传递给实例工厂。
目前,我将实施一个 Logger&lt; TParent&gt; ,并在RegisterConditional调用中使用它:
public class Logger<TParent> : ILogger
{
private readonly ILogger _decoratedLogger;
public Logger()
{
_decoratedLogger = Logger.GetLogger(typeof(TParent));
}
}
答案 0 :(得分:3)