using(DependencyInjector.Inject()
.ForType<Order>()
.ImplementedBy<InsideOrderProcessor>())
{ ... };
现在我们有了新的订单类型或订单,这需要在处理方面有细微差别。但它仍然是Order类型,不能是其他任何东西。可以这样做:
using( isInsideOrder
? DependencyInjector.Inject()
.ForType<Order>()
.ImplementedyBy<InsideOrderProcessor>()
: DependencyInjector.Inject()
.ForType<Order>()
.ImplementedBy<OutisdeOrderProcessor>())
{ ... };
这甚至会起作用吗?如果是这样,可以吗?
答案 0 :(得分:6)
在代码编译的意义上它是好的,但它不是特别易读。为了编写易于维护的代码,我建议将其重构为一个单独的方法。它应该看起来像这样:
IOrderProcessor GetOrderProcessor(bool isInsideOrder)
{
if (isInsideOrder)
{
return DependencyInjector.Inject()
.ForType<Order>()
.ImplementedyBy<InsideOrderProcessor>();
}
else
{
return DependencyInjector.Inject()
.ForType<Order>()
.ImplementedBy<OutisdeOrderProcessor>();
}
}
然后你可以这样写using
:
using(this.GetOrderProcessor(isInsideOrder))
{
...
}
答案 1 :(得分:0)
在使用块之外创建对象(通过您喜欢的任何方式),然后在using块中使用它是可以接受的。换句话说,它不需要在使用块内实例化以在使用块中使用它。