사용자 정의 IOC 컨테이너의 생성자 매개 변수로 인스턴스를 해결하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/465437

문제

제어 용기의 반전을 만들려고합니다. 지금 당장 나는 사전에 유형이있는 객체를 저장하고 요청할 때 참조를 해결합니다. 그러나 참조 또는 새 인스턴스를 해결할 수 있도록하고 싶습니다. Activator 클래스로 새 인스턴스를 만들 수 있습니다. 그러나 해결하기 위해 객체의 생성자가 1, 2 또는 매개 변수를 가져 오면 어떻게해야합니까?

예를 들어, 나는 다음과 같은 말을 할 수 있기를 원합니다.

Container.register<IFoo>(new Foo(Proxy));
Container.register<IBar>(new Boo(Proxy, DataThing));

그리고처럼 해결하십시오

IFoo MyFoo = Resolver.resolve<IFoo>();
IBar MyBar = Resolver.resolve<IBar>();

여기서 myfoo가 주어진 매개 변수와 함께 심어집니다 대리 그리고 mybar 대리 그리고 Datathing.

무엇을 하는가 해결하다 그런 일을하기 위해해야합니까?

도움이 되었습니까?

해결책 2

나는 그것을 방법으로 나누기로 결정했다. 컨테이너에 저장된 인스턴스를 제공하는 결의. 그리고 새로운 인스턴스를 재조정합니다.

같은 것 :

 public T Create<T>()
         {
             if (registeredTypes.ContainsKey(typeof(T)))
                 return (T)Activator.CreateInstance(registeredTypes[typeof(T)].
                                                                       GetType());
             else
                 throw new DependencyResolverException("Can't
                                       create type. Type " + typeof(T) + "
                                                           not found.");
         }

다른 팁

점검 http://funq.codeplex.com. 이것은 Lambda 표현식을 사용하여 해결할 기능을 정의하는 매우 작은 용기입니다. 여러 매개 변수를 처리합니다.

Activator는 매개 변수가있는 생성자가있는 클래스의 인스턴스를 만들 수 있습니다.

이 과부하를 살펴보십시오 생성 방법.

당신은 관습을 제공 할 수 있습니다 접합재 일치 생성자를 수동으로 검색합니다.

당신의 경우 해결하다 메소드는 등록 된 클래스 인스턴스 (예에서 새 부 (프록시, 데이터 팅)에 대한 참조를 반환해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top