我想要使用Castle Windsor配置一系列核心服务,例如日志记录,缓存,电子邮件配置等。通过app.config更改可以轻松配置这些服务将是一个很大的好处(例如,甚至只是对于开发/测试来说,能够告诉应用程序通过除实际邮件服务器之外的其他机制来路由所有电子邮件流量,这很棒。
两个问题:
我希望这是有道理的,谢谢。
答案 0 :(得分:2)
关于第一点,请使用property injection。
注入依赖项有两种选择;通过构造函数或通过属性。由于您不希望在构造函数链中传递依赖关系,因此唯一的另一种方法是通过属性注入。这样做的好处是,如果基类需要添加/删除/更改依赖项,它不会影响从它继承的所有内容。
有些人(包括我自己)回避了属性注入,因为它使得依赖关系不明显,并且可能意味着它们是可选的。这可以使单元测试(你正在这样做,对吗?)很困难,因为你必须检查类以查看需要哪些依赖项。如果他们在构造函数中,那很明显。
但是,如果你可以使你的服务理智null-object implementations以便他们 可选,或者单位测试的影响不会使你逐步发展,那么这是一个很好的途径走了。
关于你的第二个问题,如果你无法控制如何创建类,你不能指望Windsor提供任何依赖。最多可以单独解决依赖关系(即调用container.Resolve<IYourDependency>()
)并将它们分配给实现的属性。