我有两个域,我通过两个应用程序接口访问它们IA1
,IA2
它们每个都使用不同的存储库R1
和R2
. 存储库使用允许他们创建 NHibernate 会话的接口,ISimpleSessionFactory
.
如果存储库共享一个数据库,我将使用统一容器像这样设置它们:
var unity = new UnityContainer();
unity.RegisterType<ISimpleSessionFactory, NHibernateSessionFactory>(
new ContainerControlledLifetimeManager(), new InjectionConstructor("ConnectionA"));
unity.RegisterType<IA1, A1>();
unity.RegisterType<R1>();
unity.RegisterType<IA2, A2>();
unity.RegisterType<R2>();
但他们不共享连接字符串,所以我想做这样的事情:
var unity = new UnityContainer();
var child1 = unity.CreateChildContainer();
child1.RegisterType<ISimpleSessionFactory, NHibernateSessionFactory>(
new ContainerControlledLifetimeManager(), new InjectionConstructor("ConnectionA"));
child1.RegisterType<IA1, A1>();
child1.RegisterType<R1>();
var child2 = unity.CreateChildContainer();
child2.RegisterType<ISimpleSessionFactory, NHibernateSessionFactory>(
new ContainerControlledLifetimeManager(), new InjectionConstructor("ConnectionB"));
child2.RegisterType<IA2, A2>();
child2.RegisterType<R2>();
然而,我的问题是我想IA2
从A1
课堂上解决。理想情况下,我希望在父容器中拥有除会话工厂之外的所有内容。这只是存储库R1
,R2
需要不同ISimpleSessionFactory
的 s 但据我了解,如果未在子本地解决,它只会退回到父级,因此如果我将任何内容移至父级,它将找不到会话工厂。