2012-07-13 3 views
0

입력 된 공장 구현을 가지고 놀고 있는데 입력 된 팩토리에 대한 성 페이지를 읽었습니다. 건설 매개 변수를 제네릭 형식의 공장으로 전달하는 방법을 알고 싶습니다.MVC DI 캐슬 형식화 된 팩터 리 매개 변수가있는 경우

public interface IFacilityFactory { 
    IFacility<T> Create<T>(); // how to pass some parameter(s) to any T constructor? 
} 

일부 방향을 알려주세요. 고맙습니다.

+1

왜이 작업을 수행 하시겠습니까? –

+0

감사합니다. 이 같은 일을하고 싶습니다 var component = factory.CreateComponent ("foo", 3); 입력 된 공장 페이지에서 찾아 냈습니다. 미안해, 나는 장님이었다. – Tom

답변

2

제네릭 형식 매개 변수 'T'로 사용할 수있는 제한되지 않은 가능한 형식 집합에 대해 공통적 인 생성자 매개 변수 집합을 제공해야하므로 의미가 없습니다.

그러나 제쳐 놓고 말하면, 당신이 그것을 할 수 있다고 생각합니다. 팩토리를 사용할 때 Resolve() Windsor가 통과하게 할 팩터 리 인터페이스의 매개 변수를 선언하기 만하면됩니다. 매개 변수 이름은 사전 키가됩니다. 컨테이너 자체에서 해석 될 생성자 속성을 선언 할 필요는 없습니다.

예. 우리는 용기와 종속 클래스 푸에 등록 된 구성 요소 바있다 말 : 우리가 입력 된 공장을 사용하는 경우

public interface IGenericFactory 
{ 
    T Create<T>(int something, string somethingElse) 
} 

가 윈저는 두 개의 매개 변수를 통과한다 : 우리는 공장 인터페이스를 선언 할

public class Foo 
{ 
    // Constructor requires Bar to be resolved from the container 
    public Foo(int something, Bar bar, string somethingElse) 
    { 
     ... 
    } 
} 

컨테이너에서 다른 매개 변수 (막대)를 확인하십시오. 'something'과 'somethingElse'매개 변수는 사전에 넣기 만하면 사용할 수 있는지 여부를 판단 할 수 있습니다. 물론 Create<Foo>(1, "")을 호출해도 사용할 수 있지만 Foo 이외의 다른 유형에서는 중복 될 수 있습니다.

+0

감사합니다. 나는 장님이되어야한다. 그것들은 타이핑 된 공장 지시 페이지에 있습니다 : IComponent CreateComponent (string componentName, int someParameter); var 구성 요소 = factory.CreateComponent ("foo", 3); 은 다음과 같은 호출과 직접적으로 같습니다. var component = kernel.Resolve (new Dictionary {{ "componentName", "foo"}, { "someParameter", 3}}); – Tom

관련 문제