2011-09-29 4 views
7

내가 찾고있는 것은 매우 간단하지만 어떤 예제도 찾을 수 없다고 생각합니다.매개 변수가있는 메소드에 ToMethod를 통한 인터페이스 바인딩

StandardKernel.Get<ISomeInteface>(new Ninject.Parameters.Parameter("dataContext", dataContext, true)); 
: 여기에 개체에 대한

요청 : 나는 개체의 인스턴스를 실제 요청시 지정하지 주입 매개 변수와 팩토리 메소드를 호출해서 Ninject함으로써 객체를 생성해서 Ninject을 사용하고 싶습니다

그리고 ISomeInterface를 런타임에 값이 전달 될 것으로 예상하는 메서드에 매핑하고 싶습니다.

여기에 인터페이스를 매핑 :

Kernel.Bind<ISomeInterface>().ToMethod(SomeObject.Create(--> `what do I put here?`)); 

이 가능합니까? 그렇다면 인터페이스를 올바르게 매핑하는 방법은 무엇입니까? 감사합니다.

답변

6
ToMethod(ctx => 
    SomeObject.Create(
     (IDataContext)ctx.Parameters.Single(p =>p.Name == "dataContext") 
     .GetValue(ctx, null)) 

하지만 당신은 다른 곳에서도 당신의 복합 루트 이외에서 Get를 호출 피하기 위해 디자인을 재고해야한다.

+0

답장을 보내 주셔서 감사합니다. 불행히도 코드는 컴파일되지 않습니다. 그리고 네, 합성 루트에서 factory 메소드를 호출 할 계획입니다. (많은 것들이 있기 때문에) 상속 계층 구조가 있습니다. 그리고 그들 모두에게 하나의 팩토리가 있습니다. – Igorek

+0

컴파일러에 문제가 있습니다. 매개 변수 개체와 Create() 함수가 사용하는 IDataContext 개체 사이의 변환 – Igorek

+0

Sry IogGetValue() 업데이트를 추가하지 않았습니다. –