2014-09-04 1 views
0

나는이 주제에 초보자, 그래서 내가 할 수있는이 명확하게하려고합니다 ... 나는 다음과 같은 패키지를로드합니다 WcfModule 만들어 Ninject에 차단 WCF 서비스

:

를 처음에는
Bind<IDistributorService>().To<DistributorService>().InRequestScope().Intercept().With<ExceptionInterceptor>(); 

, 내가 어떤 오류가 발생하지 않습니다,하지만 난 내 기능상의 InterceptAttribute을 넣어 :

[AttributeUsage(AttributeTargets.Method)] 
public sealed class HandleExceptionsAttribute : InterceptAttribute 
{ 
    public override IInterceptor CreateInterceptor(IProxyRequest request) 
    { 
     return request.Kernel.Get<ExceptionInterceptor>(); 
    } 
} 

[HandleExceptions] 
public virtual Result<List<DistributorDataContract>> GetDistributor(string id) 
{ 
    //...code... 

나는이 기능에 오류 얻을 : (방법의 첫 번째 줄)

문제가 될 수있는 것을 알고

InvalidProxyConstructorArgumentsException was unhandled by user code Can not instantiate proxy of class: My.Namespace.DistributorService. Could not find a parameterless constructor.

사람 : 오류로

private ServiceHost CreateNewServiceHost(Type serviceType, Uri[] baseAddresses, WebHttpBehavior webBehavior, WebHttpBinding webHttpBinding) 
{ 
    var host = base.CreateServiceHost(serviceType, baseAddresses); 
    //... 
} 

? 감사!

답변

0

이 예외는 매개 변수없는 (기본) 생성자가없고 생성자 인수가성에 전달되지 않는 "클래스 프록시"(source 참조)를 생성하라는 메시지가 표시되면 성 코어 동적 프록시에 의해 발생합니다.

ninject 차단을 특성으로 사용하면 ninject는 바인딩이 Bind<IFoo>().To<Foo>() 또는 Bind<Foo>().ToSelf()인지 여부에 관계없이 성 코어에 클래스 프록시를 생성하도록 지시합니다.

그러나 ninject가 필요한 모든 생성자 매개 변수를 해결하지 않고 전달하는 것이 이상하게 보입니다.

DistributorService의 구현은 무엇이며 CreateNewServiceHost을 포함하는 클래스의 기본 클래스는 무엇입니까?

해결 방법 : 아마도 차단을 사용할 수 있도록합니다 Intercept().With<TInterceptor>() 구문으로 전환 물론 ,

( http://codepyre.com/2010/03/using-ninject-extensions-interception-part-2-working-with-interceptors/ 참조)