我是一名申请 ASP.NET 工作的 PHP 程序员。他们给了我一个任务,让我制作一个(我选择的)实现多层架构的应用程序。
我有很多难题。据我了解,多层是一个没有通用形式的概念,每个人都应该决定什么是最适合他们的。但是,他们建议我表示层不应该对数据访问层有任何引用,这是有道理的。但...
我创建了一个新项目Add new project
(具有控制器和视图),它是一个表示层。现在,在表示层中,还有一个class library
使用 Ninject 为整个应用程序注入依赖项的NinjectIoC
. NinjectIoC 必须具有对表示层项目的引用,以便将依赖项作为参数直接注入控制器中。它还必须具有对所有其他层(DataAcessLayer、BusinessLayer 等)的引用,以便将它们绑定到它们的依赖项。
主要问题是表示层项目还必须具有对 NinjectIoC 的引用才能在 Global.asax 中创建 StandardKernel,这会创建循环依赖,并且是不允许的。
唯一的解决方案是添加对所有层(包括 DataAccessLayer)的表示层项目的引用,据我所知,这是一件坏事。但是,这是绑定所有层的所有接口并在 Global.asax 中执行的唯一方法。
我想错了吗?
编辑:
NinjectIoC
安装了 Ninject 并引用了所有层,以便在应用程序中绑定它们。它必须具有对 UI 的引用才能在 Global.asax 中调用
UI 必须有一个引用,NinjectIoC
以便它可以在 Global.asax 中调用它以进行控制器绑定。
我试图创建一个引用 NinjectIoC 的中间类库。UI 中引用了该库。问题是这也创建了一个循环依赖,因为 NinjectIoC 必须具有 UI 的引用才能绑定控制器。