c# – Autofac注册并使用名称解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Autofac注册并使用名称解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2515字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试按名称注册对象,然后在注册期间将它们作为参数接受另一种类型的ctor.
希望我的例子足够清楚,这里是:
public class Obj : IObj
{
public class Obj(string name)
}
I register the following objects like this :
public void RegisterMyObj(string name)
{
// Keyed with the object name
builder.Register<Obj>().Named<IObj>(name).WithParameter(name).SingleInstance();
}
public class ObjectsHolder : IObjectsHolder
{
public ObjectsHolder (List<IObj> objsToHold))
}
// I want to register my ObjectsHolder in the following way:
for example, this is how I want to call it from my code:
RegisterObjectsHolder(string Obj1Name, string Obj2Name)
public void RegisterObjectsHolder(params string[] objectsNames)
{
builder.Register<IObjectsHolder>().WithParameters(// Here comes the magic code which I can't figure out.
// I want objects holder to be registered with the Obj instances whose names were passed to this method,
// is there a way to do this?)
)
}
我对注册的方式并不严格.如果你知道使用不同方法实现这一目标的方法,那也可以.
提前致谢!
解决方法:
您可能希望使用“键控”服务,而不是将您的服务注册为“已命名”.无法通过名称指定服务.但你可以使用IIndex< TKey,TService>检索具有指定类型的键控服务的类字典对象.所以你可以注册:
builder.RegisterType<Service1>().Keyed<IService>("key1");
builder.RegisterType<Service2>().Keyed<IService>("key2");
builder.RegisterType<Service3>().Keyed<IService>("key3");
builder.RegisterType<Service4>().Keyed<IService>("key4");
builder.RegisterType<Service5>().Keyed<IService>("key5");
稍后,在您的构造函数中,您可以注入:
public Test(IIndex<string, IService> serviceDictionary)
{
var service1 = serviceDictionary["key1"];
}
我使用字符串对象作为键,但你可以引入例如枚举并将其用作关键.
编辑:
如果您想缩小某些课程的可用服务范围,您可以例如引入不同的枚举类型作为键.
enum ServicesA { A1, A2, A3 }
enum ServicesB { B1, B2 }
然后,registratrions:
builder.RegisterType<Service1>().Keyed<IService>(ServicesA.A1);
builder.RegisterType<Service2>().Keyed<IService>(ServicesA.A2);
builder.RegisterType<Service3>().Keyed<IService>(ServicesA.A3);
builder.RegisterType<Service4>().Keyed<IService>(ServicesB.B1);
builder.RegisterType<Service5>().Keyed<IService>(ServicesA.B2);
现在,如果你注入IIndex< SerivcesA,IService>,只有Service1,Service2和Service3可用,对于IIndex< SerivcesB,IService>它将是Service4和Service5.
您可以链接密钥注册,如果您从上面加入两个注册
builder.RegisterType<Service1>().Keyed<IService>(ServicesA.A1).Keyed<IService>("key1");`
等,你可以使用IIndex< YourEnum,IService>仅使用一些IService实现或IIndex< string,IService>与他们所有人.
内容总结
以上是互联网集市为您收集整理的c# – Autofac注册并使用名称解析全部内容,希望文章能够帮你解决c# – Autofac注册并使用名称解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。