eddieangel Ответов: 0

Несколько сеансовых фабрик nhibernate и castle windsor


Мне нужна небольшая помощь, чтобы решить проблему с помощью Castle Windsor и NHibernate.

Я уже пару дней читаю разные статьи на эту тему и не могу найти решения своей конкретной проблемы. Что я хочу сделать, так это иметь два подключения к базе данных, локальное и удаленное. Удаленное соединение будет создаваться только по требованию, поэтому оно может быть лениво загружено. Я не могу иметь определенные репозитории, использующие одну фабрику сеансов, а другие - другую фабрику, фабрики должны быть доступны для всех репозиториев, чтобы я мог синхронизировать репозитории.

Я посмотрел сюда: https://lookonmyworks.co.uk/2011/04/05/managing-multiple-session-factories-using-named-instances/ но, как вы можете видеть, он связывает разные репозитории с разными фабриками сеансов.

Я понимаю, что когда вы используете IoC, вы должны дать ему какую-то стратегию разрешения, чтобы знать, какую фабрику сеансов использовать при определенных обстоятельствах, и сейчас я просто озадачен тем, как я собираюсь это сделать. Придется ли мне в конечном итоге создавать второй набор репозиториев для удаленных репозиториев и явно указывать замку Виндзор использовать удаленный контекст для этих репозиториев?

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Kernel.ComponentRegistered += Kernel_ComponentRegistered;
    container.Register(
        Component.For<ISessionFactory>().UsingFactoryMethod(CreateNhSessionFactory).LifeStyle.Singleton,
        Component.For<NhUnitOfWorkInterceptor>().LifeStyle.Transient,
        Classes.FromAssembly(Assembly.GetAssembly(typeof(NhClaimRepository))).InSameNamespaceAs<NhClaimRepository>().WithService.DefaultInterfaces().LifestyleTransient(),
        Classes.FromAssembly(Assembly.GetAssembly(typeof(ClaimService))).InSameNamespaceAs<ClaimService>().WithService.DefaultInterfaces().LifestyleTransient()
        );
}

private static ISessionFactory CreateNhSessionFactory()
{
    var config = new Configuration().Configure();
    return Fluently.Configure(config)
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<AttorneyMap>())
        .ProxyFactoryFactory<AddPropertyChangedProxyFactoryFactory>()
        .BuildSessionFactory();
}


Извините за беспорядочный поток сообщения сознания, мозг был запутан во время этого процесса. Любая помощь очень ценится.

Что я уже пробовал:

Попробовать это: https://lookonmyworks.co.uk/2011/04/05/managing-multiple-session-factories-using-named-instances/

но для этого требуются отдельные репозитории для каждой фабрики сеансов.

А это: http://fabiomaulo.blogspot.com/2009/09/configure-sessionfactory-providers.html та же ситуация.

Я также просмотрел несколько постов на SO, но безрезультатно. Прямо сейчас я нахожусь в той точке, где я просто собираюсь выбросить DI из окна и написать отдельную DLL с помощью EF или чего-то еще, но мне придется снова написать все мои репозитории в этом новом проекте.

0 Ответов