당신은 공장 패턴을 사용할 수 있습니다 는
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 (인스턴스 등록, 컨테이너 주입 및 인스턴스 해결)에 적용 할 수 있습니다.
이것은 의존성 주입에 적합하지 않습니다. 드롭 다운 결과를 DI 컨테이너와 연결하는 쉬운 방법은 없습니다. 둘 다 주입하고 라우트 또는 URL 매개 변수에 따라 클래스를 선택하도록하십시오. –
감사합니다. 작동한다고 생각합니다. 나는 시도 할 것이다. 많은 작업 방법으로 작성하는 대신 일반 로그인 어딘가에 넣을 수 있습니까? 또한 ModelA와 ModelB를 언급하는 것을 잊어 버리는 것은 다른 어셈블리에 있습니다. 드롭 다운 값 1 내가 modelA의 인스턴스를 만들어야하는 경우를 가정하십시오. ModelB Like Public ActionResule MehtodName (InterfaceA inter) { // 경로 값을 사용해야합니까 ?? } –
DI 컨테이너에 등록하고 컨트롤러 클래스에 삽입 할 수 있습니다 (예 : 'MyController (ModelA, ModelB b)'클래스를 호출 한 다음'private readonly' 필드에 저장하면 각 액션 메소드가이를 사용할 수 있습니다. 또는 공용 인터페이스가있는 경우 IEnumerable을 삽입 한 다음 모델 자체의 일부 메타 데이터를 기반으로 사용할 IE를 선택할 수 있습니다. –