我有一个接口和 2 个实现它的类,我需要加载每个类,但统一有:
m_unityContainer.Resolve() //接口IGeneric在哪里
我的配置看起来像:
<type type="IGeneric" mapTo="ClassA">
</type>
<type type="IGeneric" mapTo="ClassB">
</type>
有任何想法吗?
谢谢
我有一个接口和 2 个实现它的类,我需要加载每个类,但统一有:
m_unityContainer.Resolve() //接口IGeneric在哪里
我的配置看起来像:
<type type="IGeneric" mapTo="ClassA">
</type>
<type type="IGeneric" mapTo="ClassB">
</type>
有任何想法吗?
谢谢
您还可以使用如下通用接口:
public interface IGeneric{}
public interface IGeneric<T> : IGeneric{}
然后对接口进行类型安全解析:
container.RegisterType<IGeneric<ClassA>, ClassA>();
container.RegisterType<IGeneric<ClassB>, ClassB>();
ClassA classA = container.Resolve<IGeneric<ClassA>>();
ClassB classB = container.Resolve<IGeneric<ClassB>>();
当你走这条路时,一些有趣的事情开始发生......
这将为您提供所有实现 IGeneric 的注册类。
IEnumerable<IGeneric> objects = container.ResolveAll<IGeneric>();
沙尔克 - 看起来不错。在 Unity.config 中指定的符号是什么?
我找到了解决方案,必须在每个条目中使用 name 属性:
并且代码看起来像 obj= container.ResolveAll("ClassA");
这是一种稍微不同的方式。我正在使用 Unity.2.1.505.2(以防万一)。
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity>
<container>
<register type="IVehicle" mapTo="Car" name="myCarKey" />
<register type="IVehicle" mapTo="Truck" name="myTruckKey" />
</container>
</unity>
这是 DotNet 代码。
UnityContainer container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container);
IVehicle v1 = container.Resolve<IVehicle>("myCarKey");
IVehicle v2 = container.Resolve<IVehicle>("myTruckKey");
看:
http://msdn.microsoft.com/en-us/library/ff664762(v=pandp.50).aspx