我在通用基础架构程序集中有几个通用接口和实现。例子:
AlphaRepository<T> : IRepository<T>
BetaRepository<T> : IRepository<T>
我正在开发模块化架构,因此每个子系统都有自己的程序集,可以利用这个公共库。每个存储库都有一个构造函数,它接受一个IDbContext。每个子系统都实现并扩展了IDbContext。是否有可能通过结构图执行以下操作:
我想将它们分成不同的注册表(即AlphaRegistry和BetaRegistry)。所有这些都将连接到初始化容器的静态IoC类中。
思想?
更新(回应史蒂文的提问):
不一定;我将它们构建为足够灵活,以共享数据库或使用单独的数据库。它们共享一个基本的DbContext:IDbContext。问题是AlphaUnitOfWork接收AlphaContext,然后将其作为IDbContext传递给EfUnitOfWork库。问题是指示结构图在使用Beta程序集类时在Alpha程序集和BetaContext中操作时使用AlphaContext。作为一种解决方法(在这种情况下),我输入了IDbContext然后使用了Forward&gt;()语法。到目前为止工作但我想与其他类(即基于调用汇编的ILogger实现,因此Alpha可以存储在DB中,Beta可以存储在NoSQL中)而不必使它们成为泛型。
答案 0 :(得分:0)
无论Steven提出的有效观点如何,我认为你可以通过以下方式解决这个问题......
在给定的注册表中,您将DbContext
和Repository
注册为命名实例,其名称与程序集名称相同。问题可能在于命名不适用于开放式通用定义,这是我现在无法检查的。
为了在相应的使用者中注入它们,您将配置哪个命名实例用于某些给定的ctor参数。您可以从刚刚配置的类型的程序集中派生名称。