나는 종종 의존성을로드해야하는 일부 클래스를 사용해야합니다. 그러나 내 구성 요소는 둘 이상의 구체적인 종속성 구현을 가질 수 있으며 일부 개체 매개 변수를 기반으로 하나를 선택합니다.사용자 매개 변수로 종속성 해결
실제 문제는 응용 프로그램이 시작될 때 개체 매개 변수가 항상 알려지지 않아서이 순간에 종속성을 등록하거나 해결할 수 없다는 것입니다.
interface ISample { }
class ParamForBuildSomeISampleImplementation
{
// this instance cannot be create by my startUpApplication - Container - Resolver.
// Instead, all time dependency is required (buttonClick, pageLoad and so on), this class can be instantiated.
}
class Sample1 : ISample
{
// some implementation
}
class Sample2 : ISample
{
// some other implementation
}
class MyISampleFactory
{
// Build ISample
public ISample Build(ParamForBuilderISample obj)
{
// if obj.someProperty == ".." return new Sample1();
// else if obj.someProperty == "--" return new Sample2();
// else if ...
}
}
class NeedsDependency
{
ISample _someSample;
public NeedsDependency(ISample someSample)
{
_someSample = someSample;
}
}
// *** Controllor - ApplicationStartup - other ***
// Here I have not idea how to build ISample dependency
@@ EDIT
// *** button click event handler ***
// Ok, here I know how to create ParamForBuilderISample,
// hence I can call MyISampleFactory, then, I can Use NeedDependency class:
ParamForBuilderISample obj = new ...
obj.SomeProperty = ...
obj.otherSomeProperty = ...
ISample sample = MyISampleFactory.Build(obj);
NeedDependency nd = new NeedDependency(sample);
// perfect, now my buttonClick can execute all what it wants
nd.DoSomething();
nd.DoOtherStuff();
내 시나리오 :
대신에, 예를 들면, 나는 자체가 내가 위해 concreteBuilder
에 의해 사용되는 오브젝트 매개 변수를 알고 의존 관계 (dependencies)를로드 할 필요가 몇 가지 클래스를 사용할 필요가있을 때 나에게 적절한 구현을 반환 종속성 주입 패턴에 적합합니까? 사실이라면 내 패턴을 구축하는 방법을 알지 못합니다.
본인의 예를 이해하지 못합니다. 나는 코드 숨김에서만 ParamForBuilderISample 인스턴스를 만드는 방법을 알고있다. 액션 메소드 (이게 뭐야?)를 사용했지만 액션 메소드는 아무것도 알 수 없습니다. 마지막으로, 당신은 말했다 : "의존성 주입은 메소드 인수를 가질 필요성을 제거하지 못한다."그러나 나는 아직도 그것을 어떻게하는지 모른다. – bit
내 문제의 명확한 설명을 위해 내 게시물의 코드 스 니펫을 편집했습니다. @@ Edit word를 참조하십시오. – bit