Я использую CommonSrviceLocator с WindworContainer для разрешения моих NHibernage.ISession экземпляров. ISession экземпляров создается через SessionFactory .По какой-то причине мне нужно работать с разными базами данных в одном приложении, поэтому мне нужны разные строки подключения и разные NHibernate.ISession объекты.
SessionFactory может создавать разные ISession объекты по имени БД.Поэтому я хочу получить различные объекты ISession в моем приложении, используя следующий синтаксис:
ISesssion sessionForDb1 = ServiceLocator.Current.GetInstance<ISession>("session-for-db1");
ISesssion sessionForDb2 = ServiceLocator.Current.GetInstance<ISession>("session-for-db2");
Для этого я создал следующие регистрации контейнеров:
IWindsorContainer container = new WindsorContainer();
container.AddFacility<FactorySupportFacility>();
container.Register(
Component.For<ISessionFactory>()
.Named("session-factory-for-db1")
.LifeStyle.Singleton
.UsingFactoryMethod(() => new NHibernateConfigurator().CreateSessionFactoryForDb1()),
Component.For<ISessionFactory>()
.Named("session-factory2-for-db2")
.LifeStyle.Singleton
.UsingFactoryMethod(() => new NHibernateConfigurator().CreateSessionFactoryForDb2()),
Component.For<ISession>()
.Named("session-for-db1")
.LifeStyle.PerWebRequest
.UsingFactoryMethod(kernel => kernel.Resolve<ISessionFactory>("session-factory-for-db1").OpenSession()),
Component.For<ISession>()
.Named("session-for-db2")
.LifeStyle.PerWebRequest
.UsingFactoryMethod(kernel => kernel.Resolve<ISessionFactory>("session-factory2-for-db2").OpenSession())
);
ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
Это работает, но мне здесь не нравится то, что мне нужно создать много строковых констант, которые представляют семейства объектов, и построить каждый с другим именем каждого экземпляра.Поэтому для этой задачи мне нужно зарегистрировать 4 строковые константы, если мой SessionFactory должен быть создан с другой фабрикой, мне, вероятно, потребуется определить 6 констант и т. Д.
Я хотел бы знать, еслиЕсть ли лучший подход для регистрации аналогичных семейств объектов?