4

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

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

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

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

4

3 回答 3

4

如果您正在使用服务激活(磁盘上没有 .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;
    }
}
于 2012-04-20T18:19:17.427 回答
2

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

于 2012-04-20T19:16:27.217 回答
1

我没有使用过 Ninject,但通常我会在 ServiceHost 实现中开始连接过程。就像是:

public sealed class MyServiceHost : ServiceHost
{
    public MyServiceHost() : base() 
    {
        MyServiceLocator.SetAsDefaultServiceLocator();
    }
}
于 2012-04-20T18:04:12.657 回答