条件性地注入依赖注入

时间:2016-11-01 05:29:18

标签: asp.net-mvc design-patterns dependency-injection autofac

我在ASP.NET MVC控制器的action方法中注入依赖项。

场景:我想在ASP.NET MVC控制器的action方法中使用interface。该接口由2个类实现。例如,modelA和modelB都实现interfaceA。在运行时,当用户根据下拉列表依赖注入值更改下拉列表中的值时,应确定是否应该注入modelA或modelB。

另外我不确定DI是唯一的解决方案,还是存在其他解决方案?或工厂模式不确定。

1 个答案:

答案 0 :(得分:0)

您可以使用工厂模式:

public interface InterfaceAFactory
{
    InterfaceA Create(int dropDownValue);
}

public class AFactory : InterfaceAFactory
{
    private readonly IContainer _container;
    public AFactory(IContainer container)
    {
        _container = container;
    }

    public InterfaceA Create(int dropDownValue)
    {
        if(dropDownValue > 0)
            return _container.GetInstance<ModelA>();

        _container.GetInstance<ModelB>();
    }
}

(或者只是注入所需的依赖项而不是容器) 然后简单地说

private readonly InterfaceAFactory _interfaceAFactory;

public MvcController(InterfaceAFactory interfaceAFactory)
{
    _interfaceAFactory = interfaceAFactory;
}

public void DropDownValueChanged(int dropDownValue)
{
    var model = _interfaceAFactory.Create(dropDownValue);
}

我已经使用了StructureMap,但您可以将其改编为AutoFac(注册实例,注入容器并解析实例)。