2

我有一个接口和 2 个实现它的类,我需要加载每个类,但统一有:

m_unityContainer.Resolve() //接口IGeneric在哪里

我的配置看起来像:

      <type type="IGeneric" mapTo="ClassA">
      </type>
      <type type="IGeneric" mapTo="ClassB">
      </type>

有任何想法吗?

谢谢

4

5 回答 5

2

您还可以使用如下通用接口:

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>>();

当你走这条路时,一些有趣的事情开始发生......

于 2009-04-01T00:42:27.093 回答
1

这将为您提供所有实现 IGeneric 的注册类。

IEnumerable<IGeneric> objects = container.ResolveAll<IGeneric>();
于 2009-03-13T21:03:24.030 回答
0

沙尔克 - 看起来不错。在 Unity.config 中指定的符号是什么?

于 2009-04-26T22:04:15.743 回答
0

我找到了解决方案,必须在每个条目中使用 name 属性:




并且代码看起来像 obj= container.ResolveAll("ClassA");

于 2009-03-16T15:11:24.297 回答
0

这是一种稍微不同的方式。我正在使用 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

于 2013-02-05T14:17:16.613 回答