问题标签 [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 回答
254 浏览

ioc-container - Ninject.Mvc 和 Ninject.Wcf 扩展的稳定性

在玩了一段时间后,我打算开始在类似企业的项目中使用 Ninject 2.2。谁能确认这些扩展在生产使用中没有问题?我特别担心IDisposable场景(MVC 控制器中的客户端 WCF 代理等)。

0 投票
1 回答
1433 浏览

asp.net-mvc - ASP.NET MVC 2、Ninject 2.2 并且没有为此对象定义无参数构造函数

所以我一直在使用 ASP.NET MVC 2(目前坚持使用 Visual Studio 2008),现在开始使用 Ninject 2.2 及其 MVC 集成。我从以下位置下载了 Ninject 2.2 和 Ninject.Web.Mvc:

https://github.com/downloads/ninject/ninject/Ninject-2.2.0.0-release-net-3.5.zip
https://github.com/downloads/ninject/ninject.web.mvc/Ninject.Web.Mvc2 -2.2.0.0-release-net-3.5.zip

并在我的 MVC 2 项目中引用了它们。我的 Global.asax.cs 文件看起来像这样(几乎是 Ninject.Web.Mvc README 所说的):

还有一个看起来像这样的家庭控制器:

现在,每次我运行我的项目并访问“/”时,我都会得到一个黄色的死机屏幕,并显示一条消息,上面写着“没有为此对象定义无参数构造函数”。似乎 Ninject 没有解决我的 Foo 服务并将其注入 HomeController。我想我错过了一些非常明显的东西,但我只是没有看到它。

如何让 Ninject 将 Foo 注入 HomeController,而不使用 Ninject 属性?

0 投票
1 回答
474 浏览

asp.net-mvc-2 - Ninject PerRequest 注入

我有一个使用 Ninject.Web.Mvc2 和存储库模式(基于实体框架模型构建)的 MVC 2.0 应用程序。我正在尝试创建一个仅在请求期间存在的新 ObjectContext。我正在尝试通过以下方式完成此操作:

然后,我没有足够的想法来保持这个通用性,所以我开始在 BeginRequest 中工作:

Wrapper 类只是一个通用对象,用于在请求结束时包含我想要杀死的任何内容。在这种特定情况下,我使用它来创建我的新 ObjectContext 并实现 IDisposable,因此我可以执行以下操作:

我敢肯定这不是最漂亮的方法,但在这一点上,我正在努力行动,因为我花了很多时间“学习”所有这些东西。

然后像这样注入我的控制器:

我的存储库也被注入:

当我的控制器第一次在我的 UserRepository 对象中调用 Get 方法时,它工作得很好。如果我点击刷新(或者我猜也是回发),_db 为空。当我尝试单步调试调试器时,我发现在调用 Application_BeginRequest() 之前调用了 Controller Index() 方法。我以为我对“管道”有所了解(我习惯于从 WebForms 调用页面生命周期),但现在我有点迷失了。有人可以详细说明我的大脑在哪里交叉了一些电线吗?就像我说的,这可能不是最漂亮的方法,但我只有大约一个半星期的时间来学习 MVC、DI 与 Ninject、存储库和实体框架,所以请不要觉得你在说低调对我来说,如果我似乎打破了一些非常基本的东西。

0 投票
1 回答
3619 浏览

asp.net-mvc-3 - ASP.NET MVC 3 和全局过滤器注入

您好,我正在尝试使用注入实现全局过滤器。过滤器看起来像这样。

我已经在我的 global.asax 中以以下方式附加了带有注入的过滤器。

但是由于某种原因,当应用程序运行时过滤器从未被触发,我没有正确实现它吗?

0 投票
2 回答
756 浏览

c# - Parallel.Foreach 中的 Ninject 异常

我有一段代码Parallel.Foreach在要处理的项目列表上运行。每次迭代都会创建几个对象,每个对象都会实例化并处理它自己的 Ninject IKernel 实例。当对象完成它的工作时,IKernel 被释放。

也就是说,这段代码在我的 Windows 7、I7 笔记本电脑上运行良好。但是,当我将它推送到运行 Windows 2008 的 VPS 时,我得到了这个异常。异常不会在同一次迭代中发生,有时它会经历 10 次迭代并抛出异常,有时它会经历数百次迭代。显然,这似乎是一个线程问题,但它不会发生在我的 VPS 之外的任何地方。如果重要的话,这将托管在 ASP.NET IIS 中。

这是代码片段:

编辑 1 可以肯定的是,这是一个线程安全问题,我不应该为每个应用程序创建多个 IKernel 实例。这是一个理解如何配置适当范围以实现实体框架上下文线程安全同时保留 UoW 类型方法的问题,其中多个业务层类可以在单个线程内的 UoW 范围内共享相同的 EF 上下文。

0 投票
1 回答
6275 浏览

unit-testing - 使用 Moq 模拟对象,在进行单元测试时使用 Ninject

我在使用 Ninject 的 UnitTesting 项目中使用 Moq 时遇到问题。

首先是关于我的解决方案的几行。它包含几个项目(BussinesLogic、DAL、基础设施......)。我的目标是对我在 BussinessLogic 项目中使用的逻辑进行单元测试。该解决方案基本上是针对 Windows 服务的,但我已经输入了逻辑,因此它可以独立运行。我正在使用 Ninject 并指定天气我想使用 ProductionModule 或 TestingModule(Windows 服务使用 ProductionModule,控制台应用程序使用 TestingModule)

每当我在应用程序中需要它时,我都会使用工厂模式来获取 ninject 内核。

我的 TestingModule 继承自 NinjectModule,我在其中重写 Load() 方法并在那里进行绑定。例如:

Bind<IStorageManager>().To<StubStorageManager>();

我有 StubStorageManager 但它是空的。它只包含来自 IStorageManager 的方法声明。

我想做的事情是(用外行的话):创建一个unitTest,我将在其中创建一个新内核,指定TestingModule 作为它的参数。然后我想创建一个模拟对象(假设是 IStorageManager 的模拟) storageManagerMock。IStorageManager 中的某些方法返回一个 messageObject,所以我可能也需要模拟它,因为业务逻辑正在基于该 messageObject 做一些事情。所以我想以某种方式为该消息对象设置属性,然后在其上调用一些 businessLogic 方法,这样我就可以查看逻辑是否正常工作。

我希望我没有把它复杂化太多。

请耐心等待,我对模拟和依赖注入完全陌生,但愿意学习。

0 投票
1 回答
732 浏览

asp.net-mvc-3 - 具有无参数构造函数的 Ninject 和 Provider 模型

我正在实现一个自定义 RoleProvider 并想使用 Ninject 但是我面临一个无参数构造函数问题。关于如何为此注入的任何想法?

0 投票
0 回答
395 浏览

asp.net-mvc-3 - 即使在 UseReflectionBasedInjection = true 时,在中等信任下的 Ninject.Web.MVC3 中的 SecurityException

可能重复:
Ninject 模型验证器导致中等信任问题

我已经根据其他信息源修改了 CreateKernel:

但我仍然得到:

有任何想法吗?

0 投票
1 回答
995 浏览

asp.net-mvc-3 - Ninject 和实体框架

我将 Ninject 与 MVC 应用程序一起使用,也使用 EF4.1 Code First。尝试测试是否可以从两个不同的浏览器实例发出请求时遇到问题。

基本上,如果我大致同时在两个浏览器上登录,我会收到一个错误消息,告诉我“在创建模型时无法使用上下文”。

现在,我的第一个假设是我有冲突的实例,因此没有正确设置上下文的范围。

我有一个包含必要表的基类上下文,我从中继承。然后我有一个注入的工厂,并在我请求我的存储库时负责实际创建上下文。

我需要这样做,因为我的连接字符串是在运行时决定的,所以我不能只使用 web.config 中包含的连接字符串

这个想法是当我需要我的存储库时,我注入存储库,它有自己的注入,创建它的上下文,我可以提供一些默认实现。

我的下一个担心是我没有正确关闭或销毁某些实例。我已经使用其他人的示例在会话范围内设置某些对象数据,但大多数我尝试使用 OnRequestScope。

0 投票
4 回答
1981 浏览

validation - Model.IsValid 总是返回 true

好的,我快到这里了。我有一个带有视图模型的简单 MVC3 应用程序

视图模型

控制器

出于某种原因,ModelState.IsValid 一直都是真实的。即使名称留空。就像模型/视图模型根本没有验证一样。这适用于其他应用程序,所以我很确定我没有连接一些东西。我也包含了所有的验证 javascript,尽管我认为这不是问题所在。

更新 有趣的是,@Html.TextBoxFor() 生成的 html 标签不包括 data-val 和 data-val-required 属性。

看法

更新二

那么现在这很有趣。我创建了一个新应用程序并使用基本代码进行工作。然后,当我将 DI 代码添加到 global.asax.cs 时,验证停止工作。具体来说,当我添加

并从 Application_Start() 调用它

如果我删除 SetupDependencyInjection() 验证开始工作。需要明确的是,DI 运作良好,但它似乎扼杀了验证。这在 MVC3 工具更新之前运行良好。