结构图IOC命名实例帮助
-
05-10-2019 - |
题
在结构IOC上有问题。我希望检索基于标签或名称实现相同接口的对象的不同具体实现。
internal static class InstanceHelper
{
internal enum Taxonomy
{
Foo,
Bar
}
static InstanceHelper()
{
// Initialize the container
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().Use<ObjectA>().Named(Taxonomy.Foo.ToString());
x.For<IMyInterface>().Use<ObjectB>().Named(Taxonomy.Bar.ToString());
});
}
internal static IMyInterface GetInstanceByTaxonomy(Taxonomy taxonomy)
{
// this raises an exception
ObjectFactory.GetNamedInstance<IMyInterface>(taxonomy.ToString());
}
}
文档在这方面并不好,似乎所有的示例都已弃用...使用版本2.6.1.0
谢谢。
解决方案 2
原始的方式和Amarsuperstar的方式似乎实际上是有效的,问题在于,“ Objecta”类的范围已被声明为内部,以及内部构造函数。我将其更改为公共场所,现在IOC可以看到它...在结构组件中正在发生反射。傻我。
其他提示
您使用的 AddInstances
添加您命名实例的方法
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().AddInstances(i =>
{
i.Type<ObjectA>().Named("Foo");
i.Type<ObjectB>().Named("Bar");
});
});
这对我有用,但是我确实同意,该文档有时会在版本之间具有误导性,并且我花了一段时间才能在第一次到达它。
不隶属于 StackOverflow