1

在将我的解决方案的不同层抽象为单独的项目(例如 DataAccess、BusinessLogic、ApplicationService、UserInterface (ASP.NET MVC))并强制上层仅引用下一层以确保没有来自上层的调用可以规避之后在这个架构中,我尝试将构造函数注入(使用 Unity)引入到我当前的项目中。

我并不像我想象的那样对结果感到高兴,并希望有更好的方法。

在我的 UI 层的 Global.asax 中,我不喜欢这种方式,为了构建容器,我必须引用从每一层一直到数据访问存储库的每一个项目。这只是感觉不对,因为现在可以轻松绕过多层设计。

你采取什么方法来避免这种情况?您是否为依赖注入创建了一个单独的项目并让该项目引用所有内容?那么UI层只需要引用依赖注入项目吗?

有没有更好的方法来实现这一点?

提前感谢您的建议!

4

1 回答 1

1

这只是感觉不对,因为现在可以轻松绕过多层设计

好。你总是可以绕过它。您还可以破解您的代码(或任何其他可以访问它的程序员)。您可以引入错误。您可以跳过层并直接在 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();
}

更详细的解释:

http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container

于 2012-08-31T05:44:20.483 回答