C# 使用unity依赖项注入的一次调用的顺序实现

C# 使用unity依赖项注入的一次调用的顺序实现,c#,asp.net-mvc,dependency-injection,asp.net-mvc-5,unity-container,C#,Asp.net Mvc,Dependency Injection,Asp.net Mvc 5,Unity Container,使用unity依赖项注入在异步模式下实现顺序实现的最佳方法是什么。如果我调用一个方法来创建订单,它应该在两个不同的实现中创建它 我的控制器: } 我的界面: 我的第一堂课 我的第二课堂 使用ASP.NET MVC Unity的Global.asax AppStart事件 container.RegisterType<IOrderRepository, OrderRepositorySQL>(); container.RegisterType<IOrderRepository,

使用unity依赖项注入在异步模式下实现顺序实现的最佳方法是什么。如果我调用一个方法来创建订单,它应该在两个不同的实现中创建它

我的控制器:

}

我的界面:

我的第一堂课

我的第二课堂

使用ASP.NET MVC Unity的Global.asax AppStart事件

container.RegisterType<IOrderRepository, OrderRepositorySQL>();
container.RegisterType<IOrderRepository, OrderRepositoryMongo>();
申请详情

C.NET 4.5 ASP.NETMVC5 统一3.0
不能这样做,一次只能解析一个组件。实际上,当您试图解析IORDrepository时,这两行代码会在编译时或运行时发生冲突

然后您的控制器将被注入订单处理器

public class OrderController : BaseController
{
    private IOrderProcessor ordeProcessor;

    public OrderController (IOrderProcessor processor)
    {
       this.ordeProcessor= processor;
    }

    public ActionResult Create (OrderOL obj)
    {
       var result = processor.Process(obj)
       return view();
    }
}
要注册组件

container.RegisterType<IOrderRepository, OrderRepositorySQL>("sql", null);
container.RegisterType<IOrderRepository, OrderRepositoryMongo>("mongo", null);
要解决这些问题

container.Resolve<IOrderRepository>("sql");
container.Resolve<IOrderRepository>("mongo");

您的意思是像公共类OrderRepository一样:IOrderRepository{}和container.RegisterType;container.RegisterType;如何解析OrderRepositorySQL和其他存储库?如前所述,使用命名类型注册。你注意到这是一个链接了吗?它链接到一个MSDN示例我添加了更多详细信息,以防您不知道如何注册和解决它们。事实上,我认为微软不再维护这个框架了,你应该考虑换一个这样的框架……温莎城堡很不错,就是我使用的那个
container.RegisterType<IOrderRepository, OrderRepositorySQL>();
container.RegisterType<IOrderRepository, OrderRepositoryMongo>();
container.RegisterType<IOrderRepository, OrderRepositorySQL>();
container.RegisterType<IOrderRepository, OrderRepositoryMongo>();
public interface IOrderProcessor
{
    ProcessResult Process(OrderOL obj);
}

public class OrderProcessor : IOrderProcessor
{
       public ProcessResult Process(OrderOL obj)
       {
            //TODO:
            // 1- resolve OrderRepositorySQL 
            // 2- create order
            // 3- resolve the other repository
            // 4- create order
            // 5- return the operation result
       }
}
public class OrderController : BaseController
{
    private IOrderProcessor ordeProcessor;

    public OrderController (IOrderProcessor processor)
    {
       this.ordeProcessor= processor;
    }

    public ActionResult Create (OrderOL obj)
    {
       var result = processor.Process(obj)
       return view();
    }
}
container.RegisterType<IOrderRepository, OrderRepositorySQL>("sql", null);
container.RegisterType<IOrderRepository, OrderRepositoryMongo>("mongo", null);
container.Resolve<IOrderRepository>("sql");
container.Resolve<IOrderRepository>("mongo");