Ninject 和 WCF - 初始化控制容器反转的正确方法

本文关键字:方法 WCF 初始化 控制 Ninject | 更新日期: 2023-09-27 18:31:52

使用 WCF 在 Ninject 中连接类型的正确方法是什么?我已经通过NuGet将WCF扩展和Ninject本身添加到WCF项目中。但我被困在下一步该做什么。我似乎遇到了一些使用global.asax而不是ServiceHostFactory的过时示例。ServiceHostFactory 方法是最好的方法吗?

Ninject 与 WCF 配合使用的最佳当前示例在哪里?我不确定如何使用 Ninject WCF 扩展提供的对象来进行布线。

更多信息:
我试着走过 - https://github.com/ninject/ninject.extensions.wcf/tree/Maintenance_2.2/src/Examples/WcfTimeService

我的项目无法解析 Global.asax 中的 NinjectWcfApplication .cs
这就是为什么我认为它不再与最新的Ninject兼容或最新。

Ninject 和 WCF - 初始化控制容器反转的正确方法

如果您正在使用服务激活(磁盘上没有 .svc 文件),请在 web.config 中设置 ninject 托管工厂

<serviceHostingEnvironment>
      <serviceActivations>
        <add relativeAddress="MyService.svc" service="MyService" factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" />
      </serviceActivations>
</serviceHostingEnvironment>

如果使用 .svc 文件,则可以编辑标记并将Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"添加到<%@ ServiceHost ... %>声明中。

然后你需要修改你的global.asax,从NinjectWcfApplication继承并创建内核。

public class Global : NinjectWcfApplication
{
    protected override IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        return kernel;
    }
}

您提供的链接来自 2.2,已经过时了。只需将该页面切换到主分支

我没有

使用过Ninject,但通常我会在ServiceHost实现中开始连接过程。 像这样:

public sealed class MyServiceHost : ServiceHost
{
    public MyServiceHost() : base() 
    {
        MyServiceLocator.SetAsDefaultServiceLocator();
    }
}