Unity Framework: как создать два класса из одного интерфейса? - PullRequest
2 голосов
/ 13 марта 2009

У меня есть один интерфейс с двумя классами, реализующими его, мне нужно загрузить каждый класс, но единицы:

m_unityContainer.Resolve () // Где находится интерфейс IGeneric

мой конфиг выглядит так:

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

есть идеи?

спасибо

Ответы [ 5 ]

2 голосов
/ 01 апреля 2009

Вы также можете использовать общий интерфейс следующим образом:

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

Некоторые интересные вещи начинают происходить, когда вы идете по этой дороге ...

1 голос
/ 14 марта 2009

Это даст вам все зарегистрированные классы, которые реализуют IGeneric.

IEnumerable<IGeneric> objects = container.ResolveAll<IGeneric>();
0 голосов
/ 05 февраля 2013

Вот немного другой способ. Я использую 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

0 голосов
/ 27 апреля 2009

Schalk - выглядит хорошо. Что будет обозначением для указания этого в Unity.config?

0 голосов
/ 16 марта 2009

Я нашел решение, свойство name должно использоваться в каждой записи:




и код будет выглядеть obj = container.ResolveAll ("ClassA");

...