问题标签 [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 投票
1 回答
444 浏览

.net - 如何创建结构良好的 ASP.NET MVC 多站点代码库?

我正在开展一个项目,该项目具有最终模糊定义的要求:“网站应该对其他客户‘可换肤’。”

众所周知,几乎总是需要对 UI、逻辑和模型进行更改。

我已经解释说,将另一个客户端添加到站点需要工作,而且它不会像创建新皮肤那么简单。我还解释过,不可能为未知和未定义进行设计。

话虽这么说,我想提出一种设计,既可以重用,又不会过于复杂。

我希望能够共享尽可能多的控制器和视图。

我曾考虑尝试根据用户用于进入站点的 URL 加载一组不同的路由(指向不同的控制器)(这甚至可能吗?)。我的想法是我可以定义一组基本控制器并为每个子站点从它们继承。

有没有更好的方法来做我想做的事情?

这可以用 IoC 容器来完成吗?这种方法有好处吗?

其他人如何处理应该在不同站点之间共享和主要重用单个 MVC 代码库的情况?

感谢您的任何建议或意见!

0 投票
1 回答
235 浏览

ioc-container - IoC:现有运行时对象,而不是组件的容器初始化先决条件

在我的例子中,我使用 Castle Windsor 作为我的 IoC 容器。

我想声明一个组件,其中一个构造函数参数将在运行时设置为现有对象,而不是让 IoC 容器在创建组件时创建对象。例如,我的应用程序主窗体的实例。

我怀疑有两种方法:

  1. 第一次通过容器创建对象,然后使用任何必要的运行时值对其进行配置,以便稍后当组件向 Windsor 请求它时,它就可以使用了。
  2. 创建一个IFormProvider和具体FormProvider的 ,其中组件需要IFormProvider注入一个值,随后它会要求表单实例(即formProvider.Form)。

这方面有什么进展吗?

0 投票
10 回答
844 浏览

xml - 为什么 xml 在 IOC 容器中如此突出?

我正在尝试进入 IOC 容器,我注意到其中有大量使用 xml 配置。谁能告诉我为什么许多新技术正在转向 xml 配置/编程模型(WCF、WPF、Spring.NET、Unity、Windsor)?似乎 xml 不是指定复杂设置的糟糕选择,最好在代码中执行它,其中的东西是类型安全的并且我们有智能感知。我知道有些人可能会觉得这很有争议,但我真的很好奇为什么这些非常酷的先进技术依赖于 xml。

0 投票
3 回答
323 浏览

.net - 对国际奥委会的选择感到不知所措

国际奥委会的选择太多了,我不知道从哪里开始。到目前为止,我已经研究过 Spring.NET、Unity、Ninject、Windsor 和 StructureMap,但我不知道是什么让其中一个比另一个更好。那么,您最喜欢的 IOC 是什么,以及哪些功能让您使用它胜过其他任何东西?

0 投票
1 回答
1486 浏览

c# - DI:处理 IDisposable 对象的生命周期

所以我正在研究我的 DI/IoC 容器OpenNETCF.IoC,并且我有一个(合理的)功能请求,为容器集合中的 IDisposable 项目添加某种形式的生命周期管理。

我目前的想法是,由于我无法查询对象以查看它是否已被释放,并且我无法获取它何时被释放的事件,因此我必须为开发人员想要的对象创建某种形式的包装器要管理的框架。

现在可以使用 AddNew 添加对象(为简单起见,我们假设只有一个重载并且没有 Add):

我正在考虑添加一种新方法(其中一组,但你明白了):

DisposableWrappedObject 如下所示:

现在,当通过 AddNewDIsposable 将项目添加到容器时,还会添加一个事件处理程序,以便当它被 Disposed(通过包装器)时,框架会将其从基础集合中删除。

我实际上已经实现了这个并且它通过了单元测试,但我正在寻找关于它可能被破坏的地方的意见,或者它可能如何使它对消费开发者更加“友好”。

编辑 1

由于有一个关于如何使用 Disposing 事件的问题,这里有一些代码(修剪到什么是重要的):

0 投票
1 回答
210 浏览

java - 一个集群感知的 IoC 框架——你认为它应该做什么?

我目前正在尝试选择一个论文主题,最好使用 Java。:)

在某些情况下,成熟的 Java EE 堆栈是过时的软件。你不使用很多东西,你不需要如此紧密的复制等等。

如果您选择走轻量级路线,您可以使用 Spring、Guice 或任何其他 IoC 框架,您可以使用一些不错的功能,例如 DI(使用 Spring 更是如此,因为他们已经将所有东西都包装在他们的口味中),但是让我们设置您想要在应用程序级别进行复制和负载平衡。你有什么选择?所以这就是我的想法:集群感知 IoC 框架怎么样,您可以在其中执行以下操作:

并且这些方法调用将分布在集群上,因此可以有效地实现字段级别的数据复制。

或者类似的东西:

将 ad-hoc 集群添加到组合中(使用多播地址/广播),并实现这些功能将允许任何单个应用程序有效地扩展。

你觉得呢?你有没有什么想法?这会是一个很好的话题吗?

0 投票
1 回答
896 浏览

inversion-of-control - 管理 autofac 容器设置

我的一位团队成员决定在我们的一项服务上使用 autofac,因为我们想尝试一下,所以我们坚持使用它。

现在已经过去了一段时间,容器设置方法已经增长!它太大了,以至于我们遇到了问题。

拆分它并没有带来我们想要的结果。也许我们只是用错了。

所以我的问题是:我们如何管理容器设置?我们可以转储到 XML 中还是有任何其他最佳实践?

0 投票
1 回答
458 浏览

dependency-injection - 在 Ninject v1 中重置 IKernel

我在使用 Ninject v1 和重置 StandardKernel 时遇到问题。我有一个静态对象,我用它来提供对内核的访问,就像这样

当我尝试在各种单元测试(我使用 MSTest)或健身装置中使用 ObjectFactory 时,问题就出现了。我总是在每个新的测试或夹具之前调用 ObjectFactory.Reset() 方法,但有时看起来重置实际上并没有工作,而是保留了原始绑定。我知道有一种方法可以在 Ninject v2 中重置 IKernel 对象,但我们还没有准备好采取行动(这对我们来说是一个相当重要的举措)。

有人可以就为什么会发生这种情况提供一些建议吗?我猜这与在不同跑步者的不同线程上执行测试的方式有关,但我该如何避免呢?

提前致谢

0 投票
2 回答
2134 浏览

.net - 依赖注入和 .NET 属性

我有几个方法属性可以做一些记录。我们的日志记录代码位于接口 (ILog) 后面,如果属性仅依赖于该接口而不是实现,我会喜欢它。这实际上并不是关于可测试性或依赖倒置,而是关于保持组件的耦合清洁。

一个例子是我们有一个 web (Mvc) 特定属性,如下所示:

LogFactory 依赖于具体的实现 Log.cs。这具有将我的 Web DLL 耦合到包含具体实现的 DLL 的不幸效果——使整个系统更加僵化和脆弱。

任何其他明显存在这种依赖关系的位置,我们只需使用我们的 IOC 容器来注入它。这正是我现在想要对属性执行的操作,但我不确定如何操作!

所以,我的问题是:如何将具体的依赖项注入到接口后面的 .NET Framework 属性中(最好通过像 StructureMap 这样的 IOC 容器 - 但任何可行的方法都可以)?

0 投票
2 回答
1558 浏览

c# - 为什么 Castle Windsor 试图将我的“内容”和“脚本”文件夹解析为控制器?

我创建了一个 ASP.NET MVC 应用程序并尝试使用 Castle Windsor 作为我的 IOC

但是,当控制器尝试解析时,我将“内容”和“脚本”放入方法中的“控制器名称”参数中CreateController(RequestContext requestContext, string controllerName)。不用说这些不是控制器。它们似乎是网站的文件夹

为什么要尝试将这些注册为控制器?

我如何忽略这些文件夹?

谢谢

WindsorControllerFactory 的异常

由于无法发布图像,我必须对其进行描述 - 它基本上只是说

'找不到内容控制器'

全球.asax.cs

windsorControllerFactory.cs