2014-01-15 4 views
0

이중 채널을 사용하는 WCF 서비스에서 서비스를 구성하여 클라이언트가 서비스 계층의 구성 요소가 발생시킨 이벤트를 릴레이하도록 클라이언트에서 다시 호출 할 수 있도록 노력하고 있습니다. 프록시 클래스가 정의 및 구성과 같이됩니다 :Ninject : WCF 이중 서비스와 함께 사용하기 위해 ServiceHost 인스턴스를 바인딩하십시오.

public class EvsMembershipProxy : DuplexClientBase<IMembershipProviderCallback>, IEvsMembershipProvider 
{ 
    public EvsMembershipProxy(InstanceContext callbackInstance): base(callbackInstance) 
    { 
    } 
} 

내가 ASP.NET 회원 시스템을 사용하여 구성된 클래스에서이 클래스의 인스턴스를 얻을 필요가, 그래서 나는 다음과 같은 바인딩 :

_ninjectKernal.Bind<IEvsMembershipProvider>().To<EvsMembershipProxy>(); 

는 I 및 이렇게 주입한다 :

public class EvsMembershipProvider : MembershipProvider, IMembershipProviderCallback 
{ 
    #region "Dependencies" 
    [Inject] 
    public IEvsMembershipProvider MembershipProvider { get; set; } 
    #endregion 
} 

구성된 구성원 제공자는 이런 Ninject에 의해 분사된다

,
_ninjectKernal.Inject(System.Web.Security.Membership.Provider); 
_ninjectKernal.Inject(System.Web.Security.Roles.Provider); 

이중화 서비스가없는 WCF 서비스 계층에서 주입 패턴을 테스트했으며 올바르게 작동합니다.

Error activating ServiceHostBase 
No matching bindings are available, and the type is not self-bindable. 
Activation path: 
4) Injection of dependency ServiceHostBase into parameter host of constructor of type InstanceContext 
3) Injection of dependency InstanceContext into parameter callbackInstance of constructor of type EvsMembershipProxy 
2) Injection of dependency IEvsMembershipProvider into property MembershipProvider of type EvsMembershipProvider 
1) Request for EvsMembershipProvider 

Suggestions: 
1) Ensure that you have defined a binding for ServiceHostBase. 
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel. 
3) Ensure you have not accidentally created more than one kernel. 
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name. 
5) If you are using automatic module loading, ensure the search path and filters are correct. 

를 그래서 나는이 문제를 해결하려면 EvsMembershipProxy 생성자에서 사용되는 ServiceHostBase 클래스에 바인딩해야합니다 것처럼 보인다 : 그러나, 나는 양면 인쇄 서비스를 포함 할 때, Ninject에 다음과 같은 오류 바인딩시 실패합니다. 그러나 구성 방법을 모르겠습니다. 지금까지 ServiceHostBase 바인딩을 해결하기위한 최선의 시도는 다음과 같습니다.

_ninjectKernal.Bind<ServiceHostBase>().ToMethod(c => OperationContext.Current.Host); 

그러나 바인딩 중에 Null 참조 예외가 발생하여 실패합니다.

이 주입이 작동하도록 ServiceHostBase 유형을 어떻게 바인딩합니까?

** 편집 : 나는이처럼 구성 할 수 있습니다 발견 WCF 구성 **

답변

1

에 의해 공급 될 수있는 EvsMembershipProxy 생성자 인수의 일부를 제거하기 위해 원래의 코드를 단순화.

_ninjectKernal.Bind<IEvsMembershipProvider>() 
       .To<EvsMembershipProxy() 
       .WithConstructorArgument("callbackInstance", Membership.Provider); 

구성된 멤버 자격 공급자는 IMembershipProviderCallback 인터페이스를 구현하고 해당 서비스에서 콜백을받습니다.

관련 문제