问题标签 [ninject-extensions]

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 投票
2 回答
1992 浏览

dependency-injection - 如何使用 Ninject MVC3 将 IDBContextFactory 正确注入控制器的注入 IDomainFactory?

预赛

  1. 我正在使用 Ninject.MVC3 2.2.2.0 Nuget 包将 IDomain 接口的实现注入到我的控制器中,该接口使用工厂方法分离我的业务逻辑 (BL)。
  2. 我正在使用以下方法在预配置的NinjectMVC3.cs中注册我的 Ninject 模块:

    /li>
  3. 我试图避免恶魔般的服务定位器反模式的致命诅咒。

域类使用我试图通过 IDBContext 注入接口实现的 DBContext,具有以下场景:

IDomainBLFactory

域BLFactory

在控制器的命名空间中:

此时我可以使用 Ninject Constructor Injection 将 IDomainBLFactory 实现注入到我的控制器中,没有任何问题:

现在我的中心问题。

在 DomainBL 实现中,我将依赖注入到特定的 DBContext,在本例中,来自 Entity Framework 的 ADO DBContext,再次使用 IDBContextFactory:

IDbDataContextFactory

数据库数据上下文工厂

ADO模块

现在在 DomainBL 实现中,我遇到了为 DBContext 对象工厂注入必要接口的问题:

我尝试了什么?

  1. 使用构造函数注入。但我不知道在 IDBContextFactory 中的 Factory CreateNew() 调用中注入什么。为了清楚:

    在这篇有用的帖子中,我们独特的真正朋友Remo Gloor在评论中为我描述了一个可能的解决方案,引用:“创建一个具有 CreateSomething 方法的接口,该方法获取创建实例所需的一切并让它返回实例。然后在你的配置你实现了这个接口,并添加一个 IResolutionRoot 到它的构造函数,并使用这个实例来获取所需的对象。”

    问题:如何使用 Ninject.MVC3 和我适度的域类方法以正确的方式实现这一点?如何解决 IResolutionRoot 而不会因在 Service Locator 反模式中中继而受到惩罚?

  2. 对 IDBContexFactory 使用属性注入。在学习和阅读所有相互矛盾的观点以及有关它的理论解释的过程中,我可以推断这不是为我的 DBContexFactory 类代码进行注入的正确方法。没关系。无论如何它都不起作用。

    问题:我错过了什么?即使这种方法是错误的,属性也不会注入。

  3. 被诅咒。使用 DependencyResolver 并忍受耻辱。这行得通,我将继续采用这种方法,直到为我找到合适的解决方案。这真的很令人沮丧,因为在我过去 10 天的努力中缺乏知识,试图理解和做正确的事情。

    问题:我对注入接口实现的工厂方法和使用领域驱动方法分解业务逻辑的理解是否存在很大错误?如果我错了,我应该自信地实现哪​​些模式堆栈?

    我之前看到大量的文章和博客并没有以开放清晰的方式提出这个重要问题。


Remo Gloor在 www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction 中介绍了 Ninject 3.0.0 RC 的 Ninject.Extensions.Factory。

问题:此扩展是否可以与 Ninject.MVC3 一起用于一般海豚?在这种情况下,这应该是我对不久的将来的希望。

提前感谢大家的指导,并记住我们感谢您的帮助。我想很多人会发现这个场景也很有用。

0 投票
1 回答
718 浏览

ninject - Ninject Factory 派生类型

我正在查看以下链接中的 Ninject Factory 扩展: http ://www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction/

我正在尝试将我的头绕在扩展上,看看它是否真的适合我正在尝试做的事情。

工厂扩展可以根据传入的参数创建不同的类型吗?

例子:

我想要做的是:

这个扩展可以做到这一点,还是这不是真正的预期用途之一?

0 投票
1 回答
492 浏览

asp.net-mvc - 在 ASP.NET MVC3 中使用 Ninject.Wcf。从 NinjectWcfApplication 派生禁用应用程序

我在我的 ASP.NET MVC3 应用程序中使用启用 AJAX 的 Web 服务,我想向其中注入一些类。所以我安装了 NInject.Wcf,将工厂设置为 Ninject.Extensions.Wcf.NinjectServiceHostFactory,下一步是从中派生应用程序类(MVCApplication在 Global.asax 中)NinjectWcfApplication,但是当我这样做时,IIS 停止运行我的应用程序,它尝试使用 StaticFile 模块而不是将请求路由到控制器。

如何解决此问题或如何以其他方式使用 WCF 实现 NInject?

0 投票
1 回答
220 浏览

ninject - ChildKernel 上的 Ninject ActivationException

我收到一个 ActivationException,说激活 IEventBroker 时出错。MyDataSource 接受一个 IEventBroker 有一个参数。如果我不使用子内核,就没有问题。到底是怎么回事?

0 投票
1 回答
405 浏览

asp.net - 在 WebForms 应用程序中使用带有 Ninject 日志扩展的 log4net

经过一番努力,我设法获得了一个使用 Ninject 日志扩展和 log4net 作为日志框架的工作 ASP.NET webforms 应用程序。(基础知识归功于此博客)。但我有一些关于如何继续的问题。

首先,我需要公开 ILogger 属性,因为如果它是私有的或受保护的,它仍然为空。所以现在我有了这个:

代替:

我可以忍受它,但它似乎很奇怪。

另一件事是 log4net 用来填充当前上下文的 ThreadContext。我仍然可以这样使用它

但是,这会带走我刚刚添加的所有抽象。所以我正在寻找其他人在这种情况下可能拥有的一些经验/最佳实践。

附加问题:我已将 log4net 升级到 NuGet 中的当前版本 1.2.11.0,现在 Ninject.Logging.log4net 已损坏,因为它需要版本 1.2.10.0 ...有没有办法解决这个问题?

0 投票
1 回答
5901 浏览

dependency-injection - Ninject 3.0.0 基于约定的依赖注入

我的解决方案中有两个项目...一个域项目和 MVC3 Web 项目(例如 MyApp.Domain 和 MyApp.Web)。以前,在使用Ninject.Extensions.Conventions 版本时。2,我能够在 NinjectMVC3.cs 文件中使用以下语句,并且整个解决方案(Web 和域)所需的依赖项都被正确注入(例如 IFoo 自动绑定到 Foo)。

我刚刚升级到 Ninject 3.0.0(预发布)和 Ninject.Extensions.Conventions 3.0.0(另一个预发布),但是基于约定的绑定的语法已经改变。我发现我可以在新版本中使用以下语句,但它只会在 MyApp.Web 中自动绑定基于约定的接口,而不是在 MyApp.Domain 中。以前的版本绑定了整个应用程序的接口。

知道如何使用新的 Ninject 版本配置基于约定的绑定吗?我认为它与指定程序集有关,但我尝试过使用FromAssembliesMatching("*"),然后一切都失败了。

-- 编辑以在 RegisterServices 方法中显示我现有的代码: --

0 投票
2 回答
1558 浏览

ninject-2 - ASP.NET Web API(自托管)+ Ninject - 默认绑定

我正在将一个项目从 WCF Web API 转换为 ASP.NET Web API - 感谢 MS :(

自托管 POC 代码:

我将 Ninject 注册为依赖解析器。为此,我使用CommonServiceLocator.NinjectAdapter来注册它:

据我所知,这似乎有效,尽管使用 SetResolver(object) 感觉有点脏。

我现在遇到的问题是,当我尝试运行它时,有很多绑定不再注册(即IHttpContollerFactory,ILogger等)。

我是否必须一个接一个地重新注册所有“默认”依赖项?使用默认依赖解析器注册默认值似乎很奇怪,但是当设置新的依赖解析器时,我看不到重新注册默认值的快速方法。对于类似的东西ILogger,我什至似乎无法访问默认值System.Web.Http.Common.Logging.DiagnosticLogger来进行绑定。

我错过了什么吗?

0 投票
1 回答
2448 浏览

ninject - Ninject Factory 自定义实例提供程序

我正在使用 Ninject Factory Extension 并创建 wiki 中解释的自定义实例提供程序:

我定义了以下工厂接口:

我创建了以下绑定:

现在,当我调用以下命令时,我将得到一个实例FooBar

这一切都很好。然而,我想要的是更像这样的东西:

我有一个存储库,它将带回基于名称(“Foo”)的模板,我想将模板作为构造函数参数传递。

这可能吗?我不确定什么应该依赖于 ITemplateRepository。

0 投票
2 回答
206 浏览

asp.net-mvc - 在 ASP.NET MVC3 项目中组合多态对象

我的问题的本质是如何使用 MVC3 和 Ninject 以合理的方式组合这些对象(见下文)(尽管我不确定 DI 是否应该在解决方案中发挥作用)。我不能透露我的项目的真实细节,但这里有一个近似值来说明问题/问题。VB 或 C# 中的答案表示赞赏!

我有几种不同的产品,它们的特性各不相同,但它们都需要在目录中表示。每个产品类在我的数据库中都有一个对应的表。目录条目具有一些特定于作为目录条目的属性,因此具有自己的表。我已经为目录条目定义了一个接口,其意图是调用 DescriptionText 属性将根据底层的具体类型给我非常不同的结果。

鉴于 DescriptionText 是一个表示层问题,我不想在我的产品类中实现 IATAlogEntry 接口。相反,我想将其委托给某种格式化程序。

在某处的控制器中会有这样的代码:

在某处的视图中会有这样的代码:

所以问题是构造函数是什么样的?如何设置它以便在正确的位置实例化适当的对象。似乎泛型或 DI 可以帮助解决这个问题,但我似乎有一个心理障碍。我想出的唯一想法是将 ProductType 属性添加到 IATAlogEntry ,然后实现这样的工厂:

恕我直言,除了必须为每个出现的新产品类别更改工厂外,我并没有真正从这段代码中得到任何气味。然而,我的直觉告诉我这是旧的做事方式,现在 DI 和/或泛型可以做得更好。非常感谢有关如何处理此问题的建议(以及有关更好标题的建议......)

0 投票
2 回答
826 浏览

ninject - Ninject 拦截 - 移植到 Ninject 3.0 时的重大更改

我将描述我的环境:我有 Ninject + Ninject Interception Extension 用于为所有方法启用拦截器的自动注册,并标有特殊属性。是常见的 AoP + 属性 + DI 容器场景。

我的问题是:当移植到最新版本的 Ninject 和 Ninject Interception Extension - 3.0 时,当我的拦截器应该运行时,我开始遇到异常。在解析属性类型和注册拦截器时,我的 InterceptorRegistrationStrategy 工作正常。但是运行被拦截的方法会导致以下异常:

我不得不求助于 Reflector 并使用 Ninject Interception Extension 源来解决这个问题,再加上没有足够的文档,这让我处于不利的境地。

移植到 Ninject 3.0 时有人遇到同样的异常吗?

这是我用来根据属性自动注册拦截器的代码: