如何将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)
,但我不想这样做上面的代码,有一种方法来容器有参数,并解决我的类为基础的条件?例如:根据用户输入,我需要解析Class1
或Class2
,如果容器传递了构造函数参数,我可以得到Class1
或Class2
的引用。我不想创建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