簡體   English   中英

使用統一框架在MVC 3中進行依賴注入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM