如何将Unity容器的构造函数参数传递给Web API中控制器的构造函数

本文关键字:构造函数 Web API 控制器 参数传递 Unity | 更新日期: 2023-09-27 18:06:39

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

我需要有WEB API 2.0控制器的构造函数取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;
}

我想利用容器,它已经创建为参数控制器构造函数和服务层构造函数。如何将单元容器的构造函数参数传递给我的控制器和服务层。

我可以使用下面的代码
GlobalConfiguration.Configuration.DependencyResolver.GetService (type)

,但我不想这样做上面的代码,有一种方法来容器有参数,并解决我的类为基础的条件?例如:根据用户输入,我需要解析Class1Class2,如果容器传递了构造函数参数,我可以得到Class1Class2的引用。我不想创建Unity容器的新实例,注册和解析类。请让我知道如何处理这种情况与Web API构造器

如何将Unity容器的构造函数参数传递给Web API中控制器的构造函数

我可以通过在我的Botstrapper中定义带有名称的接口来解决

container.RegisterType<I1, Class1>("Class1",new HierarchicalLifetimeManager());
container.RegisterType<I1, Class2>("Class2",new HierarchicalLifetimeManager());

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

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

我可以得到我的Class1实例同样为class2