Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于unity框架的MVC 3依赖注入_C#_.net_Asp.net Mvc_Asp.net Mvc 3_Dependency Injection - Fatal编程技术网

C# 基于unity框架的MVC 3依赖注入

C# 基于unity框架的MVC 3依赖注入,c#,.net,asp.net-mvc,asp.net-mvc-3,dependency-injection,C#,.net,Asp.net Mvc,Asp.net Mvc 3,Dependency Injection,我已经在MVC3Unity框架中实现了依赖项注入,并按照说明进行了操作 它起作用了,但我有几个问题: 以下是我的实现: public interface ID { string MReturn(); } 实现此接口的类有: public class D:ID { public string MReturn() { return "Hi"; } } public class E : ID { public string MReturn()

我已经在MVC3Unity框架中实现了依赖项注入,并按照说明进行了操作

它起作用了,但我有几个问题:

以下是我的实现:

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;
    }
私有静态IUnityContainer BuildUnityContainer()
{
var container=new UnityContainer();
container.RegisterType();
容器注册类型(“反馈报告”);
container.RegisterType();
container.RegisterType();
//在此处向容器注册所有组件
//无需注册控制器
//例如container.RegisterType();
返回容器;
}
现在我的问题是

我想在Homecontroller构造函数中设置服务类D,但根据上面的代码,它在构造函数中设置了“class F”


有没有办法做到这一点?对上述代码进行任何修改?

之所以插入
F
,是因为它是
ID
的最后一个注册实现。它基本上覆盖了以前的注册

如果某些接口/基类有不同的实现,并且希望在不同的控制器中注入特定的实现,则可以将它们注册为命名实例:

container.RegisterType<ID, D>("d");
container.RegisterType<ID, E>("e");
container.RegisterType<ID, F>("f");
请注意,控制器已注册到
PerRequestLifetimeManager
,以确保为每个HTTP请求创建新实例

container.RegisterType<HomeController>(
    new PerRequestLifetimeManager(),
    new InjectionConstructor(new ResolvedParameter<ID>("d"))
);