我是这个主题的新手,所以我会努力让这个尽可能清楚......
我创建了一个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。 找不到无参数构造函数。
任何知道问题可能是什么的人?谢谢!
答案 0 :(得分:0)
当指示创建一个没有无参数(默认)构造函数且没有构造函数参数传递给castle的“类代理”时,castle core dynamic代理抛出此异常(请参阅source)
我最好的猜测是,当你按属性使用ninject拦截时,无论你的绑定是Bind<IFoo>().To<Foo>()
还是Bind<Foo>().ToSelf()
,ninject都会指示城堡核心创建一个类代理。
然而,看起来有点奇怪的是,ninject没有解析并传递所有必需的构造函数参数。
DistributorService
的实现是什么?包含CreateNewServiceHost
的类的基类的实现是什么?
解决方法:
当然,切换到Intercept().With<TInterceptor>()
语法也可能使您能够使用拦截(参见http://codepyre.com/2010/03/using-ninject-extensions-interception-part-2-working-with-interceptors/)