我在ASP.NET MVC控制器的action方法中注入依赖项。
场景:我想在ASP.NET MVC控制器的action方法中使用interface。该接口由2个类实现。例如,modelA和modelB都实现interfaceA
。在运行时,当用户根据下拉列表依赖注入值更改下拉列表中的值时,应确定是否应该注入modelA或modelB。
另外我不确定DI是唯一的解决方案,还是存在其他解决方案?或工厂模式不确定。
答案 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(注册实例,注入容器并解析实例)。