MIk*_*Ike 1 .net c# dependency-injection
好的,所以我想说我需要处理订单.我们过去总是只有一种订单,订单.由于奇怪的情况,我们必须制作我们自己的注射器,并且目前正在使用它:
using(DependencyInjector.Inject()
.ForType<Order>()
.ImplementedBy<InsideOrderProcessor>())
{ ... };
Run Code Online (Sandbox Code Playgroud)
现在我们有了一个新的订单类型或订单,需要在处理方面有细微差别.但它仍然是Order类型,不能是其他任何东西.可以这样做:
using( isInsideOrder
? DependencyInjector.Inject()
.ForType<Order>()
.ImplementedyBy<InsideOrderProcessor>()
: DependencyInjector.Inject()
.ForType<Order>()
.ImplementedBy<OutisdeOrderProcessor>())
{ ... };
Run Code Online (Sandbox Code Playgroud)
这甚至会起作用吗?如果是这样,可以吗?
从代码编译的意义上来说还可以,但它并不是特别易读.为了编写易于维护的代码,我建议将其重构为一个单独的方法.它应该看起来像这样:
IOrderProcessor GetOrderProcessor(bool isInsideOrder)
{
if (isInsideOrder)
{
return DependencyInjector.Inject()
.ForType<Order>()
.ImplementedyBy<InsideOrderProcessor>();
}
else
{
return DependencyInjector.Inject()
.ForType<Order>()
.ImplementedBy<OutisdeOrderProcessor>();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样写using:
using(this.GetOrderProcessor(isInsideOrder))
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |