依赖注入解决方案架构

时间:2012-08-30 22:36:38

标签: architecture dependency-injection

将我的解决方案的不同层抽象为单独的项目(例如DataAccess,BusinessLogic,ApplicationService,UserInterface(ASP.NET MVC))并强制执行上层只引用1层以确保没有来自上层的调用图层可以绕过这个架构,我试图将构造函数注入(使用Unity)引入到我当前的项目中。

我并不像我想的那样开心,我希望有更好的方法。

在我的UI层的Global.asax中,我不高兴,为了构建容器,我必须将每个单个层中的每个项目一直引用到数据访问存储库。这只是感觉不对,因为现在多层设计很容易被规避。

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

有没有更好的方法来实现这个目标?

提前感谢您的建议!

1 个答案:

答案 0 :(得分:1)

  

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

好。你总能规避这一点。您也可以破解您的代码(或任何其他可以访问它的程序员)。你可以引入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();
}

更详细的解释:

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