我已经在MVC 3统一框架中并按照说明实施了依赖项注入。
它有效,但是我对此有一些疑问:
这是我的实现:
public interface ID
{
string MReturn();
}
实现此接口的类是:
public class D:ID
{
public string MReturn()
{
return "Hi";
}
}
public class E : ID
{
public string MReturn()
{
return "HiE";
}
}
public class F : ID
{
public string MReturn()
{
return "Hif";
}
}
在引导程序类中,
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<ID, D>();
container.RegisterType<IController, HomeController>("feedbackRepo");
container.RegisterType<ID, E>();
container.RegisterType<ID, F>();
// register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>();
return container;
}
现在我的问题是
“我想在Homecontroller构造函数中设置服务类D,但是根据上面的代码,它正在构造函数中设置“ class F”。
有什么办法做到吗?对以上代码进行任何修改?
F
注入的原因是因为它是的最后注册的实现ID
。它基本上会覆盖以前的注册。
如果您对某些接口/基类有不同的实现,并且想在不同的控制器中注入特定的实现,则可以将它们注册为命名实例:
container.RegisterType<ID, D>("d");
container.RegisterType<ID, E>("e");
container.RegisterType<ID, F>("f");
然后在容器中注册控制器,并注入所需的命名实例ID
:
container.RegisterType<HomeController>(
new PerRequestLifetimeManager(),
new InjectionConstructor(new ResolvedParameter<ID>("d"))
);
请注意,已向控制器注册PerRequestLifetimeManager
以确保为每个HTTP请求创建新实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句