Параметр разрешения Unity с именованным сопоставлением

Я использую единство для разрешения графа объектов.

public interface ISessionManager
{
}

public class DefaultSessionManager : ISessionManager
{
}

public class OnCallSessionManager : ISessionManager
{
}

И у меня есть класс обслуживания, который использует ISessionManager в конструкторе.

public class CustomerService
{
    public class CustomerService(ISessionManager sessionManager)
    {
    }
}

Поверх графа объектов. У меня есть класс модели представления и класс диспетчера данных.

public class ViewModel(CustomerService customerService)
{
}

public class DataManager(CustomerService customerService)
{
}

Теперь я хочу разрешить ViewModel и DataManager, используя другой ISessionManager. Для ViewModel класса я хочу DefaultSessionManager и OnCallSessionManager для DataManager. Как я могу это сделать ?

Заранее спасибо.


person Steven Suryana    schedule 08.11.2012    source источник


Ответы (1)


Используя конфигурацию в коде, вы можете зарегистрировать что-то вроде этого:

var container = new UnityContainer();

container.RegisterType<ISessionManager, DefaultSessionManager>()
  .RegisterType<ISessionManager, OnCallSessionManager>("oncall")
  .RegisterType<CustomerService>()
  .RegisterType<CustomerService>(
    "oncall",
    new InjectionConstructor(
      new ResolvedParameter(
        typeof(ISessionManager),
        "oncall")))
  .RegisterType<ViewModel>()
  .RegisterType<DataManager>(
    new InjectionConstructor(
      new ResolvedParameter(
        typeof(CustomerService),
        "oncall")));

Это уродливо, как ад, но это должно сработать.

person Sebastian Weber    schedule 08.11.2012