我有两个集会:
参考方向是从DB到SERVICE(DB引用SERVICE)。
SERVICE程序集创建一个Unity容器。它将在运行时动态加载DB程序集(加载实现)。
现在我需要在数据库程序集中注册存储库对象,但我无法找到任何方法在数据库程序集中检索已创建的Unity容器(而不是创建具有不同上下文的新容器)。
问题是(可能的解决方案):有没有办法在当前的AppDomain中获取已创建的容器列表(在asms之间共享)
我不想使用查找(发现),如下所示:
container.RegisterTypes(AllClasses.FromLoadedAssemblies(),
WithMappings.FromMatchingInterface,
WithName.Default);
因为我希望我的绑定是明确的。
答案 0 :(得分:2)
你真的不应该在任何SERVICE
或DB
类库中使用(甚至引用)DI容器。应该使用容器的唯一地方是Composition Root。
Composition Root是应用程序中的入口点。在您的情况下,它是控制台应用程序的main
方法。在这里,您可以通过向容器注册类型并解析对象(通常是单个根对象)来编写所有类库中的类。
您的班级图书馆不应该有作文根。只有应用程序具有组合根。这允许其他应用程序在使用不同的DI容器时使用这些类库,甚至不使用任何(也称为Pure DI)。
答案 1 :(得分:0)
回答我自己的问题,但......我发现Unity中没有这样的功能。
可能的解决方案:
container.RegisterTypes(AllClasses.FromLoadedAssemblies(),
WithMappings.FromMatchingInterface,
WithName.Default);