我见过的所有洋葱架构示例都在ASP.NET MVC应用程序的上下文中。它们倾向于避免在UI和服务实现(基础结构)之间直接引用,方法是将IoC设置放在基础结构DLL中,并使用一些魔法(HttpModule或WebActivator)使IIS在正确的时间执行该设置代码。
就我而言,我正在开发一个Windows(TopShelf)服务,并且正在努力解决如何使服务控制项目与基础架构项目完全脱离的问题。在IIS Web应用程序中没有可以挂钩的执行管道。
我能想到的最好的方法是让服务项目扫描IoC注册表/模块类的DLL,但这看起来仍然不干净。
有什么想法吗?
答案 0 :(得分:0)
根据定义,Windows服务不是UI,所以我不确定这会实现什么。
所有TopShelf项目需求都是对实际服务类的引用:您的基础结构项目不需要引用TopShelf,如shown in the documentation。
如果您没有从TopShelf项目引用基础结构服务,那么配置您的服务将会很难看。
您需要使用ObjectFactory或ServiceResolver或其他类似的东西来构建使用IoC的服务,但无论如何这将是组合根。