如何通过Unity Container将构造函数参数添加到Web API中的Controller的Constructor中

时间:2014-06-04 20:08:32

标签: c# dependency-injection unity-container asp.net-web-api

我有两个具有相同接口实现的类,比如Class1和Class2继承自IInterface1

我需要有WEB API 2.0 Controller的构造函数来使UnityContainer具有构造函数参数,

在我的Bootstrapper类Web API中,我正在创建容器实例,如下所示

public static IUnityContainer Initialise()
{
    container = new Lazy<IUnityContainer>(() => BuildUnityContainer());
    //Uncomment below code for MVC.
    // DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    GlobalConfiguration.Configuration.DependencyResolver = 
        new IoCContainer(container.Value);

    return container.Value;
}

private static IUnityContainer BuildUnityContainer()
{
    var container = new UnityContainer();
    RegisterTypes(container);
    return container;
}

我想使用已创建为Controller构造函数的参数的Container以及服务层构造函数。如何将单元容器传递给构件函数参数到我的控制器和服务层。

我可以使用以下代码

GlobalConfiguration.Configuration.DependencyResolver.GetService (type)

但是我不想用上面的代码来做,有没有办法让Container有参数,并解决我的基于类的条件?例如:根据用户输入,我需要解析Class1Class2,如果传递的容器有构造函数参数,我可以获得Class1Class2的引用。我不想创建Unity容器的新实例,注册并解析该类。请通过Web API构造函数让我知道处理这种情况。

1 个答案:

答案 0 :(得分:0)

我可以通过在Botstrapper

中定义名称接口来解决
container.RegisterType<I1, Class1>("Class1",new HierarchicalLifetimeManager());
container.RegisterType<I1, Class2>("Class2",new HierarchicalLifetimeManager());

由于我无法在服务层中获得GlobalConfiguration.Configuration.DependecyResolver的引用,因此我使unitycontainer在控制器和服务层中具有构造函数参数。尝试通过他们的名字来解决

_serviceinstance= _unityContainer.Resolve<I1>("Class1");

我能够为class2获得类似的Class1实例

相关问题