Unity解析参数与命名映射

时间:2012-11-08 04:45:59

标签: c# unity-container

我正在使用unity来解析对象图。

public interface ISessionManager
{
}

public class DefaultSessionManager : ISessionManager
{
}

public class OnCallSessionManager : ISessionManager
{
}

我有在构造函数

上使用ISessionManager的服务类
public class CustomerService
{
    public class CustomerService(ISessionManager sessionManager)
    {
    }
}

在对象图之上。我有一个viewmodel类和一个数据管理器类。

public class ViewModel(CustomerService customerService)
{
}

public class DataManager(CustomerService customerService)
{
}

现在我想使用不同的ISessionManager解析ViewModel和DataManager。 对于ViewModel课程,我需要DefaultSessionManagerOnCallSessionManager DataManager。我怎么能这样做?

提前致谢。

1 个答案:

答案 0 :(得分: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")));

它很难看,但它应该可以解决问题。