加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 来自Ninject的Bind(Of T)是什么DLL

发布时间:2020-12-14 01:58:23 所属栏目:Windows 来源:网络整理
导读:我正在使用.Net 3.5和一个最终将成为 Windows服务的控制台应用程序. 我找到的大多数例子都使用了类似的东西 BindIWeapon().ToSword(); 我已将所有DLL作为参考包含在我的项目中,编译器仍在抱怨.我出错的地方有哪些线索?对不起,这可能是一个愚蠢的问题. 更新
我正在使用.Net 3.5和一个最终将成为 Windows服务的控制台应用程序.

我找到的大多数例子都使用了类似的东西

Bind<IWeapon>().To<Sword>();

我已将所有DLL作为参考包含在我的项目中,编译器仍在抱怨.我出错的地方有哪些线索?对不起,这可能是一个愚蠢的问题.

更新:只需注意一些似乎需要但未被引用的其他库.有像Castle Core这样的图书馆.这些应该包括在内吗?

解决方法

您需要确保执行的第一件事是在您重写的Load方法内的Ninject模块中执行绑定代码.

例如:

public class ApplicationModule : NinjectModule {

  public override void Load() {

    Bind<IWeapon>().To<Sword>(); 

    // additional bindings continue ...
  }
}

NinjectModule类继承定义Ninject流畅绑定语法的类和接口,从而使Bind< T>()方法在类的范围内可用.然后在实例化内核时将这些模块传递给Ninject内核:

var kernel = new StandardKernel(new ApplicationModule());

然后将调用传递给内核的每个模块的Load()方法,并执行包含在方法中的绑定定义.

上面的例子将NinjectModule指定为基类;但是,这是针对Ninject的2.0版本.如果您使用的是Ninject 1.x,那么您的基类将是StandardModule.在任何一种情况下,都会覆盖load方法,并在那里发出绑定语句(两个版本都相似).

要进一步回答你的问题:

>对于Ninject 1.x,所需的DLL是ninject.core.dll,并且定义了StandardModule的命名空间是Ninject.Core.
>对于Ninhect 2.0,所需的DLL是ninject.dll,NinjectModule定义的命名空间是Ninject.Modules.

在这两种情况下,您可能需要引用更多名称空间,具体取决于绑定语句的复杂程度 – 即,如果您使用上下文绑定或范围绑定等.在Ninject 1.x的情况下,您还可能需要引用Ninject .Conditions.dll用于这些更复杂的案例.

除非您使用的是Ninject的拦截功能,否则您不需要引用Castle.Core,这是一个1.x核心功能,但在2.0版本中是一个扩展.

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读