我一直在努力让ninject在wcf中工作,使用wcf扩展和使用dynamicproxy2扩展的拦截。我基本上创建了一个Time属性,并让它在基本场景中工作。我遇到麻烦的地方是在ninject模块中我使用构造函数参数创建服务绑定:
Bind<IMyDependency>().To<MyDependency>();
Bind<IService1>().To<Service1>().WithConstructorArgument("dependency", Kernel.Get<IMyDependency>());
一切正常,但Time属性不会触发我的Service1或MyDependency中的任何内容。
时间属性是漂浮在互联网上的标准属性。唯一的另一段代码确实是CreateKernel方法是global.asax,它看起来像这样:
protected override IKernel CreateKernel() {
IKernel kernel = new StandardKernel(
new NinjectSettings() { LoadExtensions = false },
new WcfNinjectModule(),
new DynamicProxy2Module()
);
return kernel;
}
感谢您的帮助!
马特
编辑12/12/2011:根据要求,我在下面添加了更多详细信息: 整个wcf ninject模块:
public class WcfNinjectModule : NinjectModule
{
public override void Load()
{
Bind<IMyDependency>().To<MyDependency>();
Bind<IService1>().To<Service1>();
}
}
global.asax中的create kernel方法在上面,而global.asax继承自NinjectWcfApplication。
服务方法如下:
public class Service1 : IService1
{
private IMyDependency _dependency;
public Service1()
{
}
public Service1(IMyDependency dependency)
{
_dependency = dependency;
}
[Time]
public virtual string GetData(string value)
{
return string.Format(_dependency.GetMyString(), value);
}
}
public interface IMyDependency
{
string GetMyString();
}
public class MyDependency : IMyDependency
{
[Time]
public virtual string GetMyString()
{
return "Hello {0}";
}
}
这有帮助吗?
由于删除了'WithConstructor'参数,时间拦截属性将在GetMyString上触发,但不在GetData上触发。
马特
答案 0 :(得分:0)
经过多一点工作(并编写最后一篇文章编辑),结果发现只是删除WithConstructorArgument方法确实解决了我的问题,现在一切似乎都正常。
马特