C# 使用unity依赖项注入的一次调用的顺序实现
使用unity依赖项注入在异步模式下实现顺序实现的最佳方法是什么。如果我调用一个方法来创建订单,它应该在两个不同的实现中创建它 我的控制器: } 我的界面: 我的第一堂课 我的第二课堂 使用ASP.NET MVC Unity的Global.asax AppStart事件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,
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");