gpt4 book ai didi

.net - Ninject 的 Bind(Of T) 位于什么 DLL 中

转载 作者:行者123 更新时间:2023-12-04 18:16:33 26 4
gpt4 key购买 nike

我正在使用 .Net 3.5 和最终将成为 Windows 服务的控制台应用程序。

我发现的大多数示例都使用类似

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

我已将所有 DLL 作为引用包含在我的项目中,但编译器仍在提示。关于我哪里出错的任何线索?抱歉,这可能是一个愚蠢的问题。

更新:请注意似乎需要但未引用的许多其他库。有像 CaSTLe Core 这样的图书馆。应该包括这些吗?

最佳答案

您需要确保您正在做的第一件事是在您覆盖的 Load 方法内的 Ninject 模块中执行绑定(bind)代码。

例如:

public class ApplicationModule : NinjectModule {

public override void Load() {

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

// additional bindings continue ...
}
}

NinjectModule 类继承了定义 Ninject 流式绑定(bind)语法的类和接口(interface),从而使 Bind<T>()类范围内可用的方法。然后在实例化内核时将这些模块传递给 Ninject 内核:
var kernel = new StandardKernel(new ApplicationModule()); 
Load()然后将调用传递给内核的每个模块的方法,并执行方法中包含的绑定(bind)定义。

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

要进一步回答您的问题:
  • 对于 Ninject 1.x,所需的 DLL 是 ninject.core.dll,而 StandardModule 定义的命名空间是 Ninject.Core。
  • 对于 Ninhect 2.0,所需的 DLL 是 ninject.dll,而定义 NinjectModule 的命名空间是 Ninject.Modules。

  • 在这两种情况下,您可能需要根据绑定(bind)语句的复杂程度来引用更多命名空间——即,如果您使用上下文绑定(bind)或绑定(bind)范围等。在 Ninject 1.x 的情况下,您可能还需要引用 Ninject .Conditions.dll 用于这些更复杂的情况。

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

    希望这可以帮助。

    关于.net - Ninject 的 Bind(Of T) 位于什么 DLL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2318305/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com