Architecture 依赖注入解决方案体系结构
将我的解决方案的不同层抽象为单独的项目(例如DataAccess、BusinessLogic、ApplicationService、UserInterface(ASP.NET MVC))并强制上层只能引用下层,以确保上层的调用不能绕过此体系结构,我试图在我当前的项目中引入构造函数注入(使用Unity) 我对结果并不像我想象的那样高兴,我希望有更好的方法 在UI层的Global.asax中,我不喜欢这样,为了构建容器,我必须引用从每个层到数据访问存储库的每个项目。这感觉不对,因为现在多层设计可以很容易地避免 你采取什么方法来避免这种情况?您是否为依赖项注入创建了一个单独的项目,并让该项目引用所有内容?那么UI层只需要引用依赖项注入项目 有没有更好的方法来实现这一点 提前感谢您的建议 这感觉不对,因为现在多层设计可以很容易地避免 嗯。你总是可以绕过这一点的。你也可以破解你的代码(或者任何其他有权访问它的程序员)。你可以引入bug。您可以跳过层并直接在UI层中使用EF 但你不会的,因为那是个坏习惯 但是,可以使用反射跳过这些引用(在运行时加载程序集)。问题是,其他程序集将不会自动包含在安装项目中或发布项目时 如果这不是一个问题,你想让一切都自动完成:使用我的容器。它让您在每个项目中都有一个合成根。然后,只需在UI层中执行以下操作即可加载所有其他程序集:Architecture 依赖注入解决方案体系结构,architecture,dependency-injection,Architecture,Dependency Injection,将我的解决方案的不同层抽象为单独的项目(例如DataAccess、BusinessLogic、ApplicationService、UserInterface(ASP.NET MVC))并强制上层只能引用下层,以确保上层的调用不能绕过此体系结构,我试图在我当前的项目中引入构造函数注入(使用Unity) 我对结果并不像我想象的那样高兴,我希望有更好的方法 在UI层的Global.asax中,我不喜欢这样,为了构建容器,我必须引用从每个层到数据访问存储库的每个项目。这感觉不对,因为现在多层设计可以很
public void Application_Start(string[] args)
{
var registrar = new ContainerRegistrar();
// will load all modules from all assemblies which starts with "MyApp."
registrar.RegisterModules(Environment.CurrentDirectory, "MyApp.*.dll");
var container = registrar.Build();
}
更详细的解释:
这感觉不对,因为现在多层设计可以很容易地避免
嗯。你总是可以绕过这一点的。你也可以破解你的代码(或者任何其他有权访问它的程序员)。你可以引入bug。您可以跳过层并直接在UI层中使用EF
但你不会的,因为那是个坏习惯
但是,可以使用反射跳过这些引用(在运行时加载程序集)。问题是,其他程序集将不会自动包含在安装项目中或发布项目时
如果这不是一个问题,你想让一切都自动完成:使用我的容器。它让您在每个项目中都有一个合成根。然后,只需在UI层中执行以下操作即可加载所有其他程序集:
public void Application_Start(string[] args)
{
var registrar = new ContainerRegistrar();
// will load all modules from all assemblies which starts with "MyApp."
registrar.RegisterModules(Environment.CurrentDirectory, "MyApp.*.dll");
var container = registrar.Build();
}
更详细的解释: