wcf - 无法让 Ninject 拦截与 WCF 一起使用

标签 wcf ninject ninject-extensions ninject-interception

我们正在从 UNITY 切换到 Ninject 作为 WCF 服务的默认服务定位器。有一个漂亮的 NuGet 包可用于执行此操作,并且可以轻而易举地获得标准分辨率。

但是 - 我想拦截对我的 WCF 服务的调用。这是我所拥有的:

我的 .svc 文件:

<%@ ServiceHost Language="C#" Debug="true" Service="NinjectWcfApp.Service1" Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" %>

这是我的服务:
public class Service1 : IService1
{


   [Inject]
    public ISomeManager Manager { get; set; }


public string GetData(int value)
{
    if(this.Manager != null)
        this.Manager.DoStuff();


    return string.Format("You entered: {0}", value);
}

}

内核是这样构建的:
private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ISomeManager>().To<SomeManager>();
    kernel.Bind<IService1>().To<Service1>().Intercept().With<MyInterceptor>();
}   

如果我像这样设置内核,则注入(inject)管理器实例,但不会发生拦截。我的拦截器在执行之前和之后记录一些东西,从来没有被调用过。

其他 Stackoverflow 线程建议使用:
    kernel.Bind<Service1>().ToSelf().Intercept().With<MyInterceptor>();

如果我这样做,经理就不会被注入(inject)。如果我继续创建一个接受管理器的构造函数,它可以工作,但同样:没有拦截。
    kernel.Bind<Service1>().ToSelf().WithConstructorArgument("manager", kernel.Get<ISomeManager>()).Intercept().With<MyInterceptor>();

我在这里做错了什么?

最佳答案

任何被拦截的方法都必须是虚拟的:

    public virtual string GetData(int value)

关于wcf - 无法让 Ninject 拦截与 WCF 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187272/

相关文章:

c# - 在 Ninject 中使用 ToFactory 时出现 ActivationException

c# - 如何正确使用依赖注入(inject)?

c# - SignalR 的 Ninject 依赖注入(inject)

c# - 在业务层中使用 [DataContract] 标记类是一个糟糕的设计吗?

.net - 为什么我本地 WCF 客户端的 IP 不是 127.0.0.1?

c# - 单元测试和构造函数依赖注入(inject)

c# - 使用 Ninject 和 Ninject.Extensions.Nlog2 的空引用异常

c# - Ninject 工厂扩展和 InCallScope 没有给出预期的结果

c# - 将服务引用添加到 WCF 并不总是创建 .datasource 文件

.net - 如何使用多个参数调用 RESTful WCF 服务方法?