【发布时间】:2011-11-30 05:10:46
【问题描述】:
我有一个库处理与我在大多数应用程序中使用的数据库后端的交互,现在想要转换为 IoC 结构(在内部使用 Autofac,但它的使用不应依赖于特定的 IoC 容器,甚至不依赖于使用一个)。我将如何以“默认”方式连接库的内部依赖项,而无需应用程序处理它,但在必要时能够提供其他实现?
例如:库可以在用户硬盘上存储和读取不同后端服务器的连接凭据。这些信息的一部分,至少是密码,是加密的,通常使用库中定义的默认加密——所以通常我不想关心使用库的应用程序中的细节。但在某些情况下,当从我的应用程序调用登录方法时,我需要提供不同的加密算法(例如通过IConnectionEncryption 接口)。
我需要在我的库和应用程序中做什么才能实现这一目标?
【问题讨论】:
-
您是否需要在启动时应用不同的实现作为选项,或者由于上下文的变化而在运行时动态应用?
-
@MarcL。仅在启动时;如果应用程序提供了自己的实现,我希望在整个过程中都使用它。
-
@MarkSeemann 我后来发现了这个问题,我猜你的回答就图书馆的 API 而言已经说明了一切。但是,我希望能够通过 IoC 容器处理库的内部依赖项和默认实现,尽管这似乎很困难,因为它不会有一个点,最终调用所有代码可以作为我的组合根(仅适用于图书馆;我希望它在外部与容器无关)。
标签: .net dependency-injection inversion-of-control autofac