c#-Simple Injector是否可以结合TypeFactoryContext向实例工厂注册?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Simple Injector是否可以结合TypeFactoryContext向实例工厂注册?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1360字,纯文字阅读大概需要2分钟。
内容图文
![c#-Simple Injector是否可以结合TypeFactoryContext向实例工厂注册?](/upload/InfoBanner/zyjiaocheng/668/508aa1edf13449ec8196f7a0361ec7ad.jpg)
我正在开发一个非常需要根据SOLID原则进行重构的旧代码库.第一步,我们将简单注入器依赖项注入容器添加到混合中.
对于其中一项注册,我需要非常类似于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< TParent>.并在RegisterConditional调用中使用它:
public class Logger<TParent> : ILogger
{
private readonly ILogger _decoratedLogger;
public Logger()
{
_decoratedLogger = Logger.GetLogger(typeof(TParent));
}
}
解决方法:
Can this be accomplished in Simple Injector?
是的,没有.
>不,使用RegisterConditional不支持此功能,这是因为Simple Injector会尝试将您推向注册类型,因此它可以尽可能多地验证和诊断对象图.首选的方法是创建一个代理类,就像here解释的那样.它基本上解释了您当前的解决方案,但是具有Logger< T>.而是继承自LogImp,因为这导致了更简单的解决方案.
>是的,这是可能的,但是您必须还原为使用自定义的IDependencyInjectionBehavior,如here所述(该示例适用于Serilog,但可以轻松地重写为log4net).但是,如果可能,首选第一种方法.
内容总结
以上是互联网集市为您收集整理的c#-Simple Injector是否可以结合TypeFactoryContext向实例工厂注册?全部内容,希望文章能够帮你解决c#-Simple Injector是否可以结合TypeFactoryContext向实例工厂注册?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。