Параметър за разрешаване на 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