【问题标题】:Ninject and WCF - Correct method to initialize the Inversion of Control ContainerNinject 和 WCF - 初始化控制容器反转的正确方法
【发布时间】:2012-04-20 17:41:05
【问题描述】:

在 Ninject 中使用 WCF 连接类型的正确方法是什么。我已经通过 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 不兼容。

【问题讨论】:

  • 无法解析 NinjectWcfApplication 时遇到了什么错误?
  • 我也收到“激活 IntPtr 时出错,没有可用的匹配绑定...”错误。你是怎么解决这个问题的?
  • hambonius,对不起,我不记得我做了什么来解决这个问题。对不起。

标签: c# .net wcf inversion-of-control ninject


【解决方案1】:

如果您使用服务激活(磁盘上没有 .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" 添加到 &lt;%@ ServiceHost ... %&gt; 声明中。

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

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

【讨论】:

  • 对我向 Remo 提出的问题有什么想法吗?
  • AppStart 文件夹实际上是由 Nuget 添加的(通过 Ninjet 包)。我建议创建您自己的继承自 NinjectModule 的类,并在 Load 方法中设置您的绑定。这样您就可以使用 Kernel.Load 在任何地方加载绑定
【解决方案2】:

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

【讨论】:

  • 关于错误的任何想法:错误激活 IntPtr 没有匹配的绑定可用,并且类型不是自绑定的。
  • 顺便说一句,感谢您为我指明了正确的方向 - 想想如果我能找到上面的错误,我就会被设置。
  • 我还注意到我现在有一个 AppStart 文件夹和一个 NinjectWebCommon.cs 文件。这是 NuGet 添加的吗?我应该在那里或其他地方绑定我的接口吗?
  • 这取决于,如果你是 IIS 托管是,否则不是
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2019-10-03
    • 2023-01-26
    相关资源
    最近更新 更多