我目前正在一个多项目.net解决方案中实现AutoFac,该解决方案包含多个应用层,UI上的MVC,业务逻辑的中间层以及与我的数据库通信的后端存储库层。
我将使用AutoFac作为依赖项并解决层之间的依赖关系。我有一个关于它的架构的问题。
我原本计划在UI层(MVC Web应用程序)中设置AutoFac模块,但这会导致Web应用程序添加对我解决方案中所有项目的引用,我并不热衷于此,因为我认为UI层应该不知道存储库项目。
如果我将AutoFac设置分配给中间项目并且包含对所有项目的引用,那将抽象出逻辑。但是我在这里遇到的问题是我无法启动初始启动,甚至我在哪里可以放置xml配置。
这里的其他人有什么看法,哪里是我的AutoFac设置的最佳位置?
答案 0 :(得分:1)
在我看来,在你的UI层上引用项目是没有问题的,因为你必须在容器上注册所有类型。这里的问题是每层的依赖性,我的意思是层之间的耦合类型。由于您正在处理图层之间的抽象,因此无需参考。
我们有一个项目有3个项目需要使用一切(Asp.Net MVC,一些Windows服务和一个WPF项目),我保持我的Container初始化(我使用MS Unity)在另一个类库和参考那里的一切,因为我们需要所有类型来做每个依赖的注册。我在项目中引用了这个项目(Asp.Net Mvc,Windows Services,WPF)并调用它应该在哪里(application_start
事件在Global.asax for Web,OnStart
事件在Windows服务上,{{ WPF中的1}}文件。
在评论中回答你的问题..你在另一个类库中保留了一些东西(我们称之为program
)并且你将在你将要使用的项目上引用这个项目(启动器)(asp .net mvc,console app,winforms,wpf,windows services,wcf等...)。您无需在Starter中引用UI项目。
调用不可访问的方法来初始化所有内容(容器,sessionFactory,如果你正在使用NHibernate),并确保你正在我之前所说的每个类型的项目的正确位置(在Global中Project.Starter
事件)。用于Web的asax,Windows服务上的application_start
事件,WPF中的OnStart
文件等等。)