[英]Dependency injection in MVC 3 using unity framework
我已經在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";
}
}
在bootstrapper類中,
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請求創建新實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.