问题标签 [ninject-2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3365 浏览

parameters - Ninject 2.0 的上下文绑定

在 Ninject 1.0 中,我有以下绑定定义:

鉴于这样的绑定,我有电话:

第一次调用被解析为 Target1 的实例,第二次调用被解析为 Target2 的实例。

如何将其翻译成 Ninject 2.0?

0 投票
1 回答
2623 浏览

asp.net-mvc-2 - 从头开始使用带有 Ninject 2 的 ASP.NET MVC 2

我昨晚刚刚在一个新项目上做了文件-> 新项目。啊,绿色田野的气味。

我正在使用刚刚发布的 ASP.NET MVC 2(即没有预览版或发布候选版,真实的东西),并认为我会开始使用带有 MVC 扩展的 Ninject 2(也是发布版)。我下载了 MVC 扩展项目,在 VS2008Sp1 中打开它,在发布模式下构建它,然后进入 mvc2\build\release 文件夹并将 Ninject.dll 和 Ninject.Web.Mvc.dll 从那里复制到我的库文件夹中项目(这样我就可以在源代码管理中使用它们,并且始终在任何地方都有正确的版本)。我没有包含相应的 .xml 文件 - 应该吗?它们只是提供智能感知还是其他一些功能?我相信没什么大不了的。

无论如何,我遵循了我能找到的最新建议;我在 MVC2 项目中引用了 DLL,然后开始研究 Global.asax.cs。首先我让它继承自 NinjectHttpApplication。我删除了 Application_Start() 方法,并改写了 OnApplicationStarted() 。这是那个方法:

而且我也听从了 VS 的建议,实现了 CreateKernel 方法:

就这些。没有对项目进行其他修改。

您会注意到 RegisterAllControllersIn() 方法在上面的两个地方被注释掉了。我想我可以用三种不同的组合来运行它,所有这些组合都有它们时髦的副作用;

  • 像上面一样运行它。

然后,我看到了标准的“欢迎使用 ASP.NET MVC”页面。但是,在浏览器中正确显示此页面后,VS 向我显示了一个引发的异常。它抛出 NinjectControllerFactory.GetControllerInstance(),在 controllerType 参数中使用 NULL 值调用它。请注意,这是在呈现 /Home 页面之后发生的 - 我不知道为什么再次调用它,并且通过使用断点,我已经确定 GetControllerInstance() 已为 HomeController 成功调用。为什么这个新调用 controllerType 为空?我真的不知道。此时按 F5 将我带回浏览器,那里没有任何抱怨。

  • 在 CreateKernel() 中取消注释 RegisterAllControllersIn() 方法

这就是东西真正开始变得时髦的地方。现在我收到 404 错误。有时我在 RegisterAllControllersIn() 行上也遇到了 ArgumentNullException,但这种情况非常罕见,而且我无法重现它。

  • 取消注释 OnApplicationStarted() 中的 RegisterAllControllers() 方法

(并将评论放回 CreateKernel() 中的评论)

导致行为与第 1 点完全相同。

因此,为了避免永远继续下去 - 是否有关于如何使用 Ninject 2(两个非 beta 版本)设置 MVC 2 项目以获得 Ninject 提供的控制器的确切分步指南?当然,然后我将开始提供一些实际的注入内容(如 ISession 对象和存储库、记录器等),但我想我会先让这个工作。

任何帮助将不胜感激!

(也发布到 Ninject Google Group)

0 投票
1 回答
255 浏览

asp.net-mvc-2 - 这个 404 似乎是不可避免的——我做错了什么?[Ninject 2.0 与 .NET 4 上的 ASP.NET MVC 2]

我今天下载了相当新的Ninject 2.0Ninject.Web.Mvc(针对 mvc2)源,并成功地针对 .NET 4(发布配置)构建了它们。当尝试使用 Ninject 2.0 运行应用程序时,我不断收到 404 错误,我不知道为什么。

这是我的 global.asax.cs(为简洁起见,略短):

EntryController存在,并且有一个Index简单的方法return View()。我已经调试,并验证调用RegisterAllControllersIn()已执行。我也尝试过使用Phil Haacks 路由调试器,但我仍然得到 404。

我该怎么做才能找到造成这种情况的原因?

0 投票
1 回答
1500 浏览

asp.net - Ninject 给出 NullReferenceException

我正在使用 asp.net MVC 2 和 Ninject 2。

设置非常简单。控制器调用调用存储库的服务。

在我的控制器中,我使用注入毫无问题地实例化服务类。但是服务类不实例化存储库,给我 NullReferenceException。

这行得通。但这并不...

当我尝试在 RoundService 类中使用 roundRepository 时给出 NullReferenceException。

模块类 -

在 global.axax.cs 中

0 投票
1 回答
4006 浏览

asp.net-mvc - Ninject 2 + ASP.NET MVC 2 来自外部程序集的绑定类型

我只是想开始使用 Ninject 2 和 ASP.NET MVC 2。我已按照本教程http://www.craftyfella.com/2010/02/creating-aspnet-mvc-2-controller.html创建一个带有 Ninject 的控制器工厂,并将第一个抽象绑定到一个具体的实现。现在我想从另一个程序集(我的具体 SQL 存储库所在的位置)加载存储库类型,但我无法让它工作。这是我的代码:

全球.asax.cs

控制器厂:

在“MyAssembly”中有一个模块:

现在,当我在入口点插入一个 MockRepository 对象时,它工作得很好,需要存储库的控制器工作得很好。kernel.Load(System.Reflection.Assembly.Load("MyAssembly")); 也完成了它的工作并注册了模块,但是一旦我调用需要存储库的控制器,我就会从 Ninject 得到一个 ActivationException:

没有匹配的绑定可用,并且该类型不可自绑定。激活路径:2)将依赖CommunityUserRepository注入到AccountController类型构造函数的参数_rep中1)对AccountController的请求

谁能给我一个从外部程序集绑定类型的最佳实践示例(这确实是依赖注入的一个重要方面)?谢谢!

0 投票
1 回答
328 浏览

ninject - 是否可以指示 Ninject 将基于上下文的逻辑应用于所有绑定?

我们最近开始使用依赖注入,并且我们选择了 Ninject 2(目前)作为我们的 IoC 容器。当我重构我们的解决方案以结合 DI 原则时,我遇到了一些让我有些烦恼的事情,我想知道是否有一种简单的方法可以绕过它。

对于我们的数据层,我们有一大堆继承同一个通用类(EntityMapper)的数据访问类。虽然过去我们总是在需要时构建这些类的新实例,但它们实际上都可以更改为单例。我们已经重写了 ObjectDataSource 以使用 Ninject 实例化其数据访问对象,因此每当我们创建一个指向 EntityMapper 类之一的 ObjectDataSource 时,Ninject 将使用其默认的自绑定策略来注入必要的依赖项。由于这些类太多了,我们宁愿不必为每个 EntityMapper 类创建显式绑定,也不必为每个类都设置特殊属性。然而,我希望能够指示 Ninject 将 EntityMapper 的任何实例制作成单例类。像这样的东西:

有没有办法做到这一点?

0 投票
4 回答
889 浏览

.net - 为什么我不能用 Ninjects ConstructorArgument 注入 null 值?

使用 Ninjects ConstructorArgument 时,您可以指定要注入特定参数的确切值。为什么这个值不能为空,或者我怎样才能让它工作?也许这不是您想做的事情,但我想在我的单元测试中使用它。示例:

0 投票
1 回答
879 浏览

dependency-injection - Ninject 内核范围

我是 Ninject 的新手,我想知道内核的范围是否应该是每个应用程序 1。那么我应该将内核视为单例吗?

谢谢。

0 投票
2 回答
2427 浏览

asp.net-mvc-2 - 将 MVC2 应用程序部署到 IIS7.5 - Ninject 要求为内容文件提供控制器

我有一个应用程序,它在 Visual Studio 2008 Sp1 中作为 MVC (1.0) 应用程序开始使用,其中包含一组 Silverlight 3 项目作为站点的一部分。一点都不花哨。使用 Ninject 进行依赖注入(第一个版本 2 测试版,现在是带有 MVC 扩展的发布版本 2)。

随着 .Net 4.0、VS2010、MVC2 等的发布,我们决定将应用程序迁移到最新的平台。VS2010 中的转换向导显然处理了所有事情,但有一个例外 - 它没有将 mvc1 的引用更改为现在指向 mvc2,所以我必须手动执行此操作。当然,这让我想到了我的应用程序中可能缺少的其他 MVC2 东西,如果我执行 File -> New Project 就会出现这些东西......但这不是这个问题的重点。

当我将此应用程序部署到 IIS 7.5 服务器(在 Win2008 R2 x64 上运行)时,该应用程序可以正常工作。但是,图像、脚本和其他静态内容似乎并不存在。当然,它们存在于服务器的磁盘上,但它们不会出现在客户端 Web 浏览器中。

我对 IIS 相当陌生,所以我知道的唯一技巧是尝试在服务器上的浏览器中打开网页,因为这可以为我提供更多信息。在这里,我们终于遇到了我们的敌人。如果我尝试直接访问其中一张图片的 URL(例如http://server/Content/someimage.jpg),我会在浏览器中收到以下错误:

IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' 没有为名为 'Content' 的控制器返回控制器。

啊哈。Web 服务器尝试将此请求提供给 MVC,MVC 的默认路由设置假定 Content 是控制器,但失败了。

我怎样才能让它将 Content/ 和 Scripts/ (以及其他)视为非控制器并只传递静态内容?这当然适用于我的开发人员机器上的 Cassini,但是一旦我部署,这个问题就会出现。

我正在使用最后一个版本的 Ninject MVC 2,其中 IoC 工具应该将丢失的控制器传递给基本控制器工厂,但这显然没有帮助。我也尝试为 Content 等添加忽略路由,但这显然也没有效果。我什至不确定我是否在正确的层面上解决了这个问题。

有谁知道在哪里可以找到这个应用程序?我可以完全控制网络服务器,所以我可以或多或少地做任何我想做的事,只要它开始工作。

谢谢!

0 投票
2 回答
1219 浏览

asp.net-mvc-2 - 如何让属性注入在 Ninject 中为 MVC 中的 ValidationAttribute 工作?

我设置了一个验证属性,我需要在其中访问数据库以完成验证。我尝试以与项目其他地方相同的方式设置属性注入,但它不起作用。我错过了什么步骤?

需要指出的另一件事是,我将 Ninject 内核设置为注入非公共属性,所以我认为这不是问题。我正在使用 Ninject 2、MVC 2 和 Ninject.Web.MVC 的 MVC 2 版本。

谢谢!