问题标签 [castle-windsor]

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

visual-studio - 使用 IoC/DI 时如何将所需的库放入 bin 文件夹

我正在使用 Castle Windsor 进行一些依赖注入,特别是我已将 DAL 层抽象为现在由 DI 加载的接口。

一旦项目被开发和部署,所有 .bin 文件都将位于同一位置,但是当我在 Visual Studio 中开发时,我能看到的唯一方法是将依赖注入项目的 .bin 文件放入启动项目的 bin文件夹要么有一个将其复制进去的构建后事件,要么是手动引用 DAL 项目以将文件拉入。

我对这两种解决方案都不完全满意,所以我想知道是否有解决这个问题的“标准”方法?

0 投票
2 回答
2802 浏览

c# - 应用面向方面的编程

我一直在使用一些基本的 AOP 风格的解决方案来解决安全、日志记录、验证等横切问题。我的解决方案围绕着Castle Windsor和 DynamicProxy,因为我可以使用基于 Boo 的 DSL 应用所有内容并保持我的代码没有属性. 周末有人告诉我看一下PostSharp,因为它应该是一个“更好”的解决方案。我已经快速浏览了 PostSharp,但我被 Attribute 的使用吓到了。

有没有人尝试过这两种解决方案并愿意分享他们的经验?

0 投票
1 回答
2377 浏览

.net - Castle Windsor:如何添加对不在 xml 中的工厂设施的调用?

我知道如何告诉 Castle Windsor 使用 XML 解析来自工厂方法的引用,但我可以通过 Container.AddComponent() 接口以编程方式完成吗?如果没有,还有其他方法可以从代码中做到这一点吗?

编辑: 似乎有些混乱,所以让我澄清一下,我正在寻找一种在代码中执行以下操作的方法:

来自这篇关于 Windsor 和 spring.net 工厂支持的 codebetter 文章

0 投票
3 回答
9777 浏览

.net - Windsor Container:如何强制处置对象?

我有一个实现 IDisposable 的对象,该对象在 Windsor Container 中注册,我想处理它,因此调用它的 Dispose 方法,下次调用 Resolve 时它会获取一个新实例。

立即自动调用 Dispose()?还是我需要做

在文档中找不到任何关于 Release 究竟是做什么的

编辑: 有关我运行的测试结果,请参阅下面的答案。现在问题变成了,如何强制容器释放具有单例生命周期的组件实例?这只需要在一个地方完成,编写自定义生命周期似乎太重了,没有内置的方法吗?

0 投票
6 回答
14990 浏览

.net - Castle Windsor:如何从代码中指定构造函数参数?

说我有以下课程

我可以通过xml向城堡温莎注册它的一个实例,如下所示

我将如何在代码中做完全相同的事情?(注意,构造函数参数)

0 投票
1 回答
2967 浏览

c# - 您可以在 Windsor Container 中注册一个类型的现有实例吗?

在 Windsor IOC 容器中是否可以注册我已经获得实例的类型,而不是让容器创建它?

0 投票
1 回答
2693 浏览

.net - Windsor Container:在代码与 XML 中注册事物

从我读过的关于 Windsor/Microkernel 的内容来看,理论上可以使用带有代码的 xml 文件来完成所有可以做的事情。事实上 - 如果我错了,请纠正我 - Windsor 层的主要贡献似乎是为微内核已经可以做的事情添加 xml 配置。

但是,我最近一直在努力寻找如何在代码中实现一些稍微复杂的功能(即如何分配默认构造函数参数值)。现在,虽然我将在我的生产版本中使用 xml,但我正在为我的测试注册代码中的组件,这变得非常有问题。他们文档的不幸状态以及我能找到的唯一文章专注于 xml 注册这一事实无济于事。

有谁知道列出如何在代码中注册事物的来源(最好使用 xml 等价物)?撇开它的存在,有没有人知道一个开源/示例项目,其中有显着的非 xml 使用 Castle Windsor/Microkernel?

0 投票
6 回答
5132 浏览

.net - Windsor 拦截器 AOP 和缓存

我正在考虑使用 Castle Windsor 的拦截器来缓存数据以帮助扩展 asp.net 站点。

有没有人对此有任何想法/经验?

小说明:我的意图是使用 Windsor 来拦截“昂贵”的调用,并将缓存本身委托给 MemCacheD 或 Velocity(或另一个分布式缓存)。

0 投票
2 回答
912 浏览

.net - 如何使用 Castle 在测试项目(TFS 2008)中进行依赖注入

我在我的测试项目中使用 Castle Windsor 进行依赖注入。我正在尝试创建我的“存储库”类之一的实例。“它在我的机器上运行良好”,但是当我在 TFS 中运行每晚构建时,我的测试无法加载所述类。

xml配置:

当我对新构建进行排队时,它会产生以下消息:

无法创建类 Example2008.Test.ActiveProductRepositoryTest 的实例。错误:System.Configuration.ConfigurationException:找不到类型名称 Example2008.Repository.LALALALALA,Example2008.Repository。

Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType(String typeName) Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] 配置,IWindsorContainer 容器) Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer 容器,IConfigurationStore 存储) Castle.Windsor .WindsorContainer.RunInstaller() Castle.Windsor.WindsorContainer..ctor(IConfigurationInterpreter 解释器) Example2008.Test.ActiveProductRepositoryTest..cctor() in d:\Code_Temp\Example Project Nightly\Sources\Example2008.Test\ProductRepositoryTest.cs:第 19 行

从这条消息看来,我的配置是正确的(可以看出我要实例化具体类'LALALALALA',所以xml配置明显已经正确的红色了)

我认为我的依赖项设置也正确(因为它在本地工作,即使我清理解决方案并重建)。

有什么想法吗?

(顺便说一句,使用 VS2008、TFS 2008.Net 3.5、Castle 1.03)

0 投票
7 回答
6207 浏览

oop - IoC,你把容器放在哪里?

我正在将城堡温莎用于我正在从事的宠物项目。我开始注意到我需要在代码的不同位置调用 IoC 容器来创建新对象。这种对容器的依赖使我的代码更难维护。

我用过两种解决方案来解决这个问题

我尝试创建抽象工厂作为容器的包装器,我可以将其注入需要创建对象的应用程序部分。这可行但有一些缺点,因为城堡很难将自己的容器作为依赖项注入。所以我必须手动完成,这违背了 IoC 容器的全部目的。

我使用主 applicationcontroller 类来包装 IoC 容器并作为中央工厂/存储库工作。这是相当成功的,但是这个类变得太大了,就像一个中心上帝对象,几乎所有其他对象都有对它的引用。

两种解决方案都有效,但都有其缺点。所以我很好奇其他人是否有同样的问题并找到了更好的解决方案。


编辑 问题不在于依赖于对象B的对象A。在这里我通常只使用构造函数注入并且一切正常。有时我有类型 A 的对象需要在其生命周期内创建可变数量的其他类型 B 的对象。我不知道该怎么做。

@Blair Conrad:到目前为止,维护问题并不严重。我有一些类依赖于容器对象调用 container.Resolve<>。而且我不想让我的代码取决于我认为的基础设施。我仍在尝试,所以我注意到在从 ninject 切换到 Castle 时,我必须更改很多代码。

@花:嗯。我喜欢你的拳头解决方案。它结合了我尝试过的两种解决方案的工作原理。我想我仍然在对象方面考虑太多,而在接口/职责方面考虑得不够。我尝试了专门建造的工厂,但我想让他们在幕后使用容器来创建对象,但我还没有发现如何以干净的方式将容器 DI 转换为对象。