可重用类库

时间:2015-12-02 13:25:57

标签: c# .net dependency-injection dependencies ninject

我有一组项目,它们提供运行.Net服务所需的所有功能。该项目通过Ninject使用Dependency Inject。

我的(简化)解决方案如下所示:

Project 1: Windows Service (Composition Root)
^
Project 2: Server Engine & Heavy Lifting (Ninject Module)
^
Project 3: Persistence / DAL (Ninject Module)
^ 
Project 4: Interfaces & Basic / Shared functionality (Interfaces)

经过一些重大改进后,事实证明我需要创建一个新的"客户端"用于与Windows服务通信的库项目。此客户端成为新项目(Project 5),并取决于Project 3Project 4中的功能。即:

Project 5: Client (Class Library)
^
Project 3: Persistence / DAL (Ninject Module)
^ 
Project 4: Interfaces & Basic / Shared functionality (Interfaces)

3个直接问题:

  1. 我不想承担在客户的消费者上连接对象图的责任。消费者只是使用它就像你已经使用过任何其他库一样。你不应该担心图书馆的内部使其工作。
  2. 客户端是一个类库,并没有自己的入口点来考虑我的组合根并建立对象图。
  3. 即使我在客户端确实有一个入口点,我的阅读建议我不应该在DI框架上有库依赖"在这种情况下[创建一个可重用的库]你应该通常使您的库在没有DI容器的情况下工作。您自己不应该依赖于这样的容器,因为这会将容器拖入" (来自Locate the correct composition root for a .NET library)。另一篇文章的另一篇摘录如下:"只有应用程序应具有组合根。图书馆和框架不应该是。" (来自http://blog.ploeh.dk/2011/07/28/CompositionRoot/)。
  4. 这些问题源于我已经在Project 3Project 4中构建了很多功能,这些功能必须在Client中使用,但这两个项目已经具有依赖性在Ninject上,所以通过代理,客户端也依赖于Ninject。

    我可以使用各种方法轻松解决这个问题,但我还没有找到一个资源解决方案,他们都觉得" hacky"就像我在一个圆形的方形推杆洞(What are the best practices for class libraries using dependency injection for internal operations?)。

0 个答案:

没有答案