0

我是这个主题的新手,所以我会尽量说清楚......

我创建了一个 WcfModule,我在其中加载了以下包:

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...

我在这个函数中得到一个错误:(方法的第一行)

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

出现错误:

用户代码未处理 InvalidProxyConstructorArgumentsException 无法实例化类的代理:My.Namespace.DistributorService。找不到无参数构造函数。

谁知道问题可能是什么?谢谢!

4

1 回答 1

0

当城堡核心动态代理被指示创建一个没有无参数(默认)构造函数并且没有构造函数参数传递给城堡的“类代理”时,会抛出此异常(参见源代码)。

我最好的猜测是,当您使用 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/

于 2014-09-06T13:25:39.877 回答