在using语句中使用条件逻辑是否可以

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)

这甚至会起作用吗?如果是这样,可以吗?

p.s*_*w.g 6

从代码编译的意义上来说还可以,但它并不是特别易读.为了编写易于维护的代码,我建议将其重构为一个单独的方法.它应该看起来像这样:

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)