我有两个具有相同接口实现的类,比如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有参数,并解决我的基于类的条件?例如:根据用户输入,我需要解析Class1
或Class2
,如果传递的容器有构造函数参数,我可以获得Class1
或Class2
的引用。我不想创建Unity容器的新实例,注册并解析该类。请通过Web API构造函数让我知道处理这种情况。
答案 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实例