问题标签 [ioc-container]

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 投票
3 回答
2244 浏览

c# - 如何在自定义 IOC 容器中使用构造函数参数解析实例?

我正在尝试构建自己的控制容器反转。现在我将对象及其类型存储在字典中,并在被询问时解析引用。但我想让解析引用或新实例成为可能。我可以使用 Activator 类创建一个新实例。但是,如果要解析的对象的构造函数接受 1、2 或任何参数怎么办?

例如,我希望能够这样说:

并像解决它

其中 MyFoo 使用给定参数Proxy和 MyBar 与ProxyDataThing实例化。

决心必须做什么才能做到这一点?

0 投票
1 回答
2016 浏览

inversion-of-control - Castle Windsor 如何响应实现多个接口的类?

例如,我有两个接口:ICustomerService 和 IOrderService,每个接口都有几个函数,如 GetCustomer、GetOrder 等。

我想要一个类来实现这两个接口:服务器。

温莎城堡对此有何回应?一开始有可能吗?当我基于两个接口之一解析服务器对象时,我会得到相同的对象吗?当我有一个在其参数中具有两个接口的构造函数时会发生什么?是否仍会构造一个对象。

假设 LifeStyle 保留其默认值:Singleton。

0 投票
7 回答
9308 浏览

inversion-of-control - 使用 IOC 容器的优缺点是什么?

使用 IOC 容器会降低应用程序的速度,因为它们中的大多数都在后台使用反射。它们还可以使您的代码更难理解(?)。光明的一面; 它们帮助您创建更松散耦合的应用程序并使单元测试更容易。使用/不使用 IOC 容器还有其他优点和缺点吗?

0 投票
1 回答
201 浏览

inversion-of-control - 国际奥委会和赛事

我很难协调 IoC、接口和事件。让我们看看我是否可以在不写书的情况下解释这一点。

我刚刚开始使用 IoC,我正在玩 Spring。我们有一个简单的数据层,它早在 EF 或其他人之前就已构建。其中一个类是具有一些方法和事件的 DBProcedure。

我创建了一个“真正的” DBProcedure 类实现的 IDBProcedure 接口。在 TDD 方式中,我希望能够将“真正的” DBProcedure 类换成另一个实现相同接口的测试类。对我来说,这意味着 IDBProcedure 接口应该定义在与我的数据层不同的命名空间/项目中,对吗?

但是 DBProcedure 可以引发一些事件,并且这些事件提供自定义 EventArgs 派生类。这是否意味着 EventArgs 类也需要在数据层之外定义?似乎它可以使界面工作,但这似乎很糟糕,因为它传播了数据层?

另一方面,也许我有错误的想法——即使我没有使用任何“真实”类,在我测试获取接口和事件定义时是否可以包含数据层命名空间?

0 投票
5 回答
2980 浏览

c# - 不了解在系统架构中创建 IoC 容器的位置

假设我有以下 4 个 .net 程序集:

  1. Winform 用户界面
  2. 商业逻辑
  3. SQL Server 数据访问(实现 IRepository)
  4. 通用接口(IRepository 等的定义)

我的业务逻辑 (2) 通过使用构造函数依赖注入的 IRepository(在 4 中定义)调用数据访问层 (3)。但是,当我创建一个业务对象时,我需要传入一个实际的存储库。为此,我的业务逻辑层中有一个单例类返回当前正在使用的实现 IRepository 的具体对象。我得出的结论是,这是一件坏事,因为我的业务逻辑层现在必须引用 3 和 4。

我想我需要一个 IoC 容器,但问题是我在哪里创建/放置它,因为我似乎在哪里创建它(1 - UI)?还需要持有对 3(SQL Server 数据访问)的引用。我不只是在解决问题,而不是实现实际的脱钩吗?

我是否在 UI 中创建 IoC 容器。或者通过另一个新程序集公开它。

(我正在使用 C#、.net 3.5 和 AutoFac)

谢谢。

0 投票
1 回答
770 浏览

nhibernate - 在 NHibernate 中设置 PerWebRequest 生活方式

我有一个非常基本的 NHibernate 设置。我没有使用 Castle Widnsor 或任何类似的东西在我的代码中执行 IoC。我想要做的就是将我的 Lifestyle 设置为 PerWebRequest,但如果不返回代码并更新它以使用 IoC 库,我无法弄清楚如何做到这一点。

有没有办法在配置文件中做到这一点?

0 投票
3 回答
11135 浏览

c# - NInject:你把你对内核的引用保存在哪里?

我在一个新的 Web 应用程序上使用 NInject,有两件事我不清楚:

  1. 我不需要保留对内核的引用(会话/应用变量)以确保 GC 不会收集我的所有实例吗?例如,如果我指定 .Using() 然后收集 Kernel 对象,我的所有“单例”不也被收集了吗?

  2. 如果我确实需要保留对 Kernel 对象的引用,我如何允许传递给 WithArguments() 的参数发生变化,或者这是不可能的。

0 投票
3 回答
5223 浏览

c# - Microsoft Unity - 将代码转换为 xml

有人可以提供我应该与 Enterprise Library 4.1 中的 Microsoft Unity 应用程序块一起使用的 XML 配置来实现与以下相同的结果吗?

所以代替这个:

我会有这个:

使用 XML 配置文件。

0 投票
6 回答
12205 浏览

inversion-of-control - 如何用城堡温莎覆盖组件?

我想在给定的 Windsor 容器中重新定义(默认)实现。这就是 OverWrite 的用途吗?不过,这不起作用。

还有其他想法吗?

干杯,拉斯

0 投票
1 回答
276 浏览

.net - 在运行时注册类型

我试图弄清楚如何在运行时使用统一注册一个类型。有什么建议么?

基本上我希望能够做到这一点: