首页 / C# / c# – 解决条件依赖关系autofac
c# – 解决条件依赖关系autofac
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 解决条件依赖关系autofac,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1536字,纯文字阅读大概需要3分钟。
内容图文
我试图根据条件解决依赖关系.
private static readonly Dictionary<string, Action<ContainerBuilder>> QRTypeDictionary =
new Dictionary<string, System.Action<ContainerBuilder>> () {
{ "REST" , (builder)=> builder
.RegisterType<RestPublisher>()
.As<Publisher>()},
{ "DB" , (builder)=> builder
.RegisterType<DBPublisher>()
.As<Publisher>()}
}
我只是想确定这是否是根据条件解决依赖关系的唯一方法.到目前为止我一直在使用Ninject,我正在寻找以下内容:
kernel.Bind<Publisher>()
.To<DbPublisher>()
.When(x => Defs.AppSettings.PublisherType == "DB")
只是想确保我使用Autofac做正确的事情
解决方法:
我可以看到3个解决方案来实现你想要的.
>使用lambda
builder.RegisterType<DbPublisher>().AsSelf();
builder.RegisterType<RestPublisher>().AsSelf();
builder.Register(c => {
switch(Defs.AppSettings.PublisherType){
case "DB":
c.Resolve<DbPublisher>();
break;
case "REST":
c.Resolve<RestPublisher>();
break;
default:
throw new NotSupportedException();
}
}).As<IPublisher>();
>使用命名注册
builder.RegisterType<DbPublisher>().Named<IPublisher>("DB");
builder.RegisterType<RestPublisher>().Named<IPublisher>("REST");
builder.Register(c => {
var index = c.Resolve<IIndex<String, IPublisher>>();
return index[Defs.AppSettings.PublisherType]
}.As<IPublisher>();
>有条件的注册
如果在注册过程中定义了Defs.AppSettings.PublisherType,则可以简单地有条件地注册您的依赖项:
switch(Defs.AppSettings.PublisherType){
case "DB":
builder.RegisterType<DbPublisher>().As<IPublisher>();
break;
case "REST":
builder.RegisterType<RestPublisher>().As<IPublisher>();
break;
default:
throw new NotSupportedException();
}
内容总结
以上是互联网集市为您收集整理的c# – 解决条件依赖关系autofac全部内容,希望文章能够帮你解决c# – 解决条件依赖关系autofac所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。