不理解在系统架构中创建IoC容器的位置

假设我有以下4个.net程序集:

  • Winforms UI
  • 商业逻辑
  • SQL Server数据访问(实现一个IRepository)
  • 通用接口(IRepository的定义等)
  • 我的业务逻辑(2)使用构造函数依赖注入通过IRepository(4中定义)调用数据访问层(3)。 但是,当我开始一个业务对象时,我需要传入一个实际的存储库。 我通过在业务逻辑层中的单例类返回实现IRepository的当前正在使用的具体对象来做到这一点。 我得出这样的结论:这是一件坏事,因为我的业务逻辑层现在必须引用3以及4。

    我认为我需要一个IoC容器,但问题是我创建/放置它的地方似乎无论我在哪里创建(1-UI)? 还需要持有对3(SQL Server数据访问)的引用。 我是不是只是在解决问题而不是实现解耦?

    我是否在UI中创建IoC容器? 或者通过另一个新程序集公开它。

    (我使用C#,.net 3.5和AutoFac)

    谢谢。


    通常应在主机项目 (应用程序入口点)中创建IoC容器。 对于作为exe项目的Windows.Forms应用程序。

    通常在简单的解决方案(10个项目下)中,只有主机项目应该引用IoC库。

    PS:使用Autofac IoC构建.NET应用程序


    注册组件时有几种可能性:

  • 代码注册:


  • 问题:你必须引用一切(你在这里)
  • 间接
    问题:找出需要注册的东西
    解:
  • 使用属性
  • 使用标记接口作为IService
  • 使用约定(请参阅StructureMap)
  • 注册配置文件:

  • 让容器做所有事情
  • 自己阅读文件

  • 顶级是一种方式(UI,就像Rinat说的)。

    至于引用,最简单的方法是查看当前文件夹中的所有程序集,并使用一些约定来获取服务。 属性工作正常,每个程序集中的注册服务器类都可以正常工作,无论适合您。 提取所有内容的代码应该可以在单独的程序集中,除非你的IoC框架已经这样做了。

    链接地址: http://www.djcxy.com/p/65661.html

    上一篇: Not understanding where to create IoC Containers in system architecture

    下一篇: Netbeans Xdebug Windows 10 waiting for connection