问题标签 [ninject]

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 回答
228 浏览

c# - 这基本上是像 NInject 这样的 IOC 所做的吗?

通常我会这样做:

其中 UserDao 是 IUserDao 的具体实现。

所以现在我的代码会乱七八糟:

现在,如果我想交换实现,我将不得不去我的 DBFactory 并更改我的代码以调用不同的实现。

现在,如果我使用 NINject,我会在应用程序启动时绑定特定的实现,或者通过配置文件。(或基于特定参数等进行绑定等)。

这就是全部吗?或者还有更多?

(我问我是否想知道它在这里对我有什么帮助的原因:Help design a order manager class

0 投票
2 回答
447 浏览

asp.net-mvc - 在 ASP.NET MVC 应用程序中使用 Ninject 2 时的注入问题

我将 Ninject 2 与 ASP.NET MVC Web 应用程序一起使用。所有依赖项都在堆栈中正确处理(Controllers->Services->Repositories)。但是,我在服务项目中有一些不在那个“链”中的类,我也想在应用程序启动时注入这些类。如何让 Ninject 识别它们?我有带有[Inject]属性的公共属性,但是当应用程序运行时,它们为空。我错过了什么?

这是我的 MvcApplication 类:

我仔细检查了两个模块以确保存在正确的绑定。

来自模块的示例:

0 投票
1 回答
148 浏览

c# - IoC 的第一步,因为我碰壁了,请解释一下“幕后”

所以我开始了这个新项目,我试图整合我所读到的所有新设计原则,即试图使事物松散耦合、可测试并遵循一些模式。

因此,我遇到了必须将太多工厂/管理器传递给我的类构造函数的问题,这导致我进入了依赖注入。

因此,如果我使用 ninject,据我所知,我会将特定的实现绑定到该类。

那么幕后发生了什么?

NInject 会,每当我实例化 SomeClass 时,它会绑定我在配置文件中定义的实现?

IE

我愿意:

ninject 会做:

正确的?

0 投票
1 回答
1009 浏览

c# - Ninject Kernel Factory:好主意与否

我有一个应用程序,目前分为服务层和数据访问层(正在使用 MVC 层)。我正在尝试减少我的课程中所需的样板 Ninject 代码的数量。

我的第一个想法是为每个业务对象类型(即 UserBase)创建一个基类,由 UserService 和 UserDAO 扩展。不幸的是,这将阻止我扩展任何其他类(即,由所有服务实现扩展的 AbstractService 类、AbstractDAO 类等)。

我的第二个想法是一个简单的工厂来返回传递给它的各种 IModule 实现的 IKernel。不幸的是,每个类都需要一个 IKernel 成员变量,但它解决了问题并允许创建 AbstractService 和 AbstractDAO。

还有其他想法可以优化我对 Ninject 的使用吗?

0 投票
2 回答
2233 浏览

ninject - 与 Ninject 的后期绑定

我正在开发一个框架扩展,它使用 Ninject 作为 IoC 容器来处理动态注入,但我在尝试解决如何实现这一点时遇到了一些麻烦。

我的框架的期望是你会传入,IModule(s)所以它可以很容易地在 MVC、WebForms 等中使用。所以我有这样的类结构:

这很好,我可以在单元测试中创建一个实例并传递一个基本实现IModule(使用InlineModule似乎推荐用于测试的构建)。

问题是直到运行时我才知道我需要注入的类型,并且它们是通过我正在扩展的框架以如下方法请求的:

这就是我难过的地方,我不确定检查->创建(如果需要)->返回的最佳方法,到目前为止我有这个:

这会将其添加到组件集合中,但我无法确定它是否创建了一个实例,或者我如何创建一个实例并为.ctor.

我是否以正确的方式进行此操作,或者 Ninject 甚至不打算以这种方式使用?

0 投票
7 回答
1598 浏览

.net - 收藏的延迟加载 - 如何获取物品?

我有一个简单的类,旨在成为一个简单的 POCO——它只保存数据。除了一个例外:它包含一组笔记。我想延迟加载这个集合,这样我就不必在不需要它们的页面上获取注释。存根是这样的:

现在,我想知道如何从这里开始。这是一个 ASP.net MVC 应用程序,我使用依赖注入将 IRepositories 注入需要它们的类中,例如我的控制器。但由于这里的这个类应该是一个非常简单的 DTO,我不愿意将 INoteRepository 注入其中,也是因为调用者不应该担心或关心这是延迟加载的事实。

因此,我正在考虑在我的模型中拥有另一个包含 INoteRepository 的类。

这当然可以,但我想知道这是否是正确的架构?我将简单的 DTOClass 耦合到另一个数据访问类,也可能耦合到我的 DI 机制(因为我需要在 Notes 的 getter 中创建数据访问类的实例)。

你会做不同的事情吗?有没有更好的方法来做到这一点,还要记住我已经使用了 Ninject?

我猜这不再是 POCO 或 DTO,因为它现在包含逻辑,但没关系。我希望它对外部调用者看起来像 POCO,所以我喜欢在这个或其他类上有一个属性“Notes”而不是像“GetNotesForProject”这样的方法。

我当前的解决方案真的很难看,因为我需要从我的 MvcApplication 获取 Ninject Kernel 并使用它来启动 ProjectDataProvider 类,该类在其构造函数中采用 INoteRepository,以避免将 INoteRepository 放在我的“DTO”类中的某个位置:

编辑:打开赏金。让我们忽略“POCO”和“DTO”的术语,我会相应地重构。所以这是关于:在这种情况下延迟加载代码应该如何看待,我可以/应该避免将 INoteRepository 传递到 MyDTOClass 吗?

0 投票
1 回答
1127 浏览

c# - DI 框架:如何避免在不使用服务定位器的情况下不断地将注入的依赖项向上传递(特别是使用 Ninject)

我需要更多帮助来“了解”像 Ninject 这样的 DI 框架如何超越基础。

取 Ninject 样本:

如果没有 DI 框架(即上面的 [Inject] 引用),引用类将类似于:

...您正在更新所有内容。是的,您已经删除了 Samurai 中的依赖项,但现在您在链上又多了一个依赖项。简单的。

使用 Ninject,您可以通过以下方式摆脱更新:

但是,这是我困惑的领域:如果没有制作某种服务定位器来有效地更新适用的内核和模块(即 .IoC.TypeResolver.Get<>()),那么 a) 最好的方法是什么?不必到处都更新内核(到处都有服务定位器引用?),并且b)更重要的是,当你有一个很大的长链时,你的依赖关系和它们自己的依赖关系,你把它带到了一路传递注入的极端我确信这是一个严重的反模式(一个朋友称之为“热土豆依赖注入”反模式)。

换句话说,我认为 DI 框架的魔力的一部分是您不必一直插入依赖关系(即您的第一个引用在其构造函数中包含 10 个参数,这些参数都与任何事情,直到沿着链走得更远) - 我的困惑的魔法或解决方案在哪里,这样依赖关系就不会不断地被向上和向上引用,或者服务定位器引用无处不在。

对我来说,进一步混淆水域是如果使用 DI 框架,那么处理引用类需要 IList 的场景的最佳方法是什么,该 IList 通常会放在构造函数中(即 new ReferencedClass(myList)),除了在像字符串数据库连接字符串这样的简单情况下,不会飞。只需创建一个属性并在更新它/DI 框架服务定位后设置它?IE

总而言之,我认为这是一个我收到后可能会感到尴尬的帖子,但现在,我已经多次撞墙试图确定最佳方法。

0 投票
3 回答
1406 浏览

dependency-injection - 将 Spring.Net IoC 替换为另一个容器(例如 Ninject)

我很想知道是否可以用 Ninject替换Spring.Net 的内置 IoC 容器。我们在我的团队中将 Ninject 用于其他项目的 IoC,因此如果可能的话,我想继续使用该容器。

这可能吗?有没有人写过 Ninject-Spring.Net 适配器?

编辑

我喜欢 Spring.Net 包的许多部分(数据访问、事务等),但我不太喜欢依赖注入容器。我想用 Ninject 替换它

谢谢

0 投票
2 回答
2768 浏览

wcf - 将 NInject 与 WCF 服务一起使用时使用 MSMQ 绑定在 WAS 中托管时替代 HttpContext

我有一个使用 MSMQ 绑定的单向 WCF 服务,该服务是使用 IIS 7.0 中的 Windows 激活服务激活的。

我是 NInject 的忠实粉丝,所以我一直在使用 WCF 的 NInject 扩展,对于典型的 HTTP WCF 服务来说,它会很好用。

但是,在 WAS 激活服务中没有 HTTP 管道,因此在绑定我的类型时我不能使用 InRequestScope,因为 System.Web.HttpContext.Current 为空。在使用 WAS 时,我正在努力寻找能够满足我想要的替代方案。AspCompatibility 模式属性在此模式下也不起作用。

我认为 InThreadScope 可能会工作,但该服务是在一个单独的线程中创建的,而不是它在其中执行的线程。

所以基本上我需要 WCF+WAS 的 HttpContext 等价物来在请求级别限定我的对象。这个世界上是否有一些静态对象可以以相同的方式工作,或者其他人对我可以一起破解的东西有任何想法吗?

0 投票
2 回答
117 浏览

asp.net-mvc - 我在哪里可以获得对 asp.net mvc 友好的 ninject?

Ninject 的网站只有 1.0 版

我在哪里可以获得具有 ninject.framework.mvc 库的库?