2017-12-14 25 views
-1

2 개의 구현 Foo1과 Foo2를 가진 IFoo 인터페이스가 있습니다.NInject : 단일 인터페이스에 다중 서비스 바인딩하기

public interface IFoo 
{ 
    void Process(); 
} 

public class Foo1 : IFoo 
{ 
    public void Process() 
    { 
    } 
} 

public class Foo2 : IFoo 
{ 
    public void Process() 
    { 
    } 
} 

아래와 같이 등록합니다.

kernel.Bind(x => x 
       .FromAssemblyContaining<IFoo>() 
       .SelectAllClasses().InheritedFrom<IFoo>() 
       .BindAllInterfaces() 
       .Configure(b => b.InRequestScope())); 

내가이

public class TestController: ApiController 
{ 
    public TestController(IFoo[] fooServices) 
    { 

    } 
} 

그러나 서비스 목록 fooServices처럼 모든 IFoo 서비스를 얻으려고하는 것은 비어 있습니다. 대신 내 모든 2 가지 서비스를 받고 싶습니다.

도와주세요!

+0

는 수동으로 동일한 인터페이스 대신에 당신의 LINQ 표현에 여러 유형을 결합하는 것을 시도했다 : 그것은 각 플러그인 유형을 통해 횡단과 인터페이스를 받고 다음과 같이 등록하여 해결되었습니다 ? 바인딩 오류 또는 해결 오류인지 확인하십시오. – ckuri

+0

@spender, 의견을 보내 주셔서 감사합니다. 나는 이것을 시도 할 것이다. –

+0

@ckury, 힌트를! 그 중 하나를 시도해 볼 가치가 –

답변

1

문제가 해결되었습니다.

서비스 등록 후 사용자 지정 어셈블리 분석기를 통해 플러그인 라이브러리를로드하는 것이 문제였습니다. 그래서 커널을 정적 속성으로 노출시키고로드 된 후에 서비스 등록을 수행했습니다.

다음 문제는 '바인딩'이 2 개의 플러그인을 1 개의 인터페이스로 등록 할 수 없다는 것입니다.

foreach (var interfaceType in pluginServiceType.GetInterfaces()) 
    kernel.bind(interfaceType).to(pluginServiceType) 
+0

당신이 거기있어 기쁘다 ... 내 의견을 게시하지 않았다 직접 대답, 그냥 진단 도구가 당신을 도울 수 있습니다. – spender