使用统一依赖注入在异步模式下实现顺序实现的最佳方法是什么。如果我调用一个方法来创建顺序,它应该在两个不同的实现中创建它。
我的控制器:
public class OrderController : BaseController
{
private IOrderRepository orderService;
public OrderController (IOrderRepository service)
{
this.orderService = service;
}
public ActionResult Create (OrderOL obj)
{
// here I want this to do two implementations
// first on OrderRepositorySQL
// and then after success response,
// it should implement in OrderRepositoryMongo as async method
orderService.Create(obj)
return view();
}
}
我的界面:
public interface IOrderRepository {
int Create (OrderOL obj);
}
我的实施班级1
public class OrderRepositorySQL : IOrderRepository
{
public int Create (OrderOL obj)
{
// logic to Create order in Data store 1
}
}
我的实施课程2
public class OrderRepositoryMongo : IOrderRepository
{
public int Create (OrderOL obj)
{
// logic to Create order in Data store 2
}
}
使用ASP.NET MVC Unity Global.asax AppStart事件
container.RegisterType<IOrderRepository, OrderRepositorySQL>();
container.RegisterType<IOrderRepository, OrderRepositoryMongo>();
申请详情
答案 0 :(得分:0)
您无法做到这一点,您只能解决一个组件。实际上,当您尝试解析IOrderRepository
时,这两行代码会在编译时或运行时发生冲突...
container.RegisterType<IOrderRepository, OrderRepositorySQL>();
container.RegisterType<IOrderRepository, OrderRepositoryMongo>();
基本上,您需要使用Named Type Registrations或向控制器注入一个包装器服务,该服务器将解析这两个组件(OrderRepositorySQL和OrderRepositoryMongo)并执行所需的处理。
假设您有一个OrderProcessor
类来处理订单并实现IOrderProcessor
接口,对吗?
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");