【发布时间】:2011-07-26 01:28:05
【问题描述】:
我是 IoC 的新手,因此一直在关注 Jeffery Palermo 在他的帖子http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ 和他的书中提供的示例https://github.com/jeffreypalermo/mvc2inaction/tree/master/manuscript/Chapter23
最需要注意的是,我没有使用预滚动的 IoC 容器,主要是因为我想了解所有活动部件。
但是,我正在创建一个 Windows 服务而不是一个 ASP.NET MVC webapp,所以我在启动部分几乎没有陷入困境。具体来说,在 web.config 中,他在基础设施项目中注册了一个 IHttpModule 实现作为启动模块,然后使用构建后事件将必要的 dll 复制到网站目录中,以绕过对 Web 项目本身的直接依赖。
我认为我在真正的 Windows 服务中没有这种奢侈,那么我应该如何实现类似的东西,我应该有一个同时依赖于基础结构和核心的小型启动项目,还是有另一种方法绕过windows服务的编译时限制?
提前致谢。
【问题讨论】:
-
特别是如果您是 IoC 的新手,我建议您使用众所周知的(并且经过测试!)IoC 容器。自己编写一个是一种高尚的方法,但从长远来看,你会浪费每个程序员已经投入的容器的时间。关于您的问题:引用 IoC 框架有什么问题?
-
@Zebi,参考问题不是关于引用 IoC 框架,而是关于直接引用基础结构 dll。 IoC 的重点似乎是消除这些传递依赖。 Web 项目的启动似乎利用了一个漏洞,即 web.config 可用于配置对基础设施层的调用,这对我来说有点欺骗,因为在桌面应用程序或服务中这样做您将无法使用相同的技术,并且必须直接从您的应用程序或 UI 项目中引用基础架构 dll,从而违背了 IoC 的目的。
-
IoC 容器的目的不是管理您的程序集引用。目的是管理类的依赖关系。 IoC 模式本身与程序集毫无关系。
-
@Zebi,但引用不是暗示依赖吗?
-
我添加了一个答案来澄清。如果这对您有所解释,请发表评论。
标签: c# windows-services inversion-of-control