1

我正在使用 WindsorContainer 和 Nhibernet 进行数据库访问。我使用以下代码在 application_start 事件上初始化容器,它适用于单个数据库。

  Container = new WindsorContainer();
 ControllerBuilder.Current.SetControllerFactory(Container.Resolve<IControllerFactory>());

现在,我想在我的应用程序中使用另一个数据库。请建议我如何用不同的数据库初始化另一个容器(WindsorContainer)对象。

4

2 回答 2

3

在我的设置中,我有两个数据库,我称之为“事务”数据库和“数据仓库”数据库。

我有一个“会话工厂”界面:

public interface ICmsSessionFactory
{
    ISession GetTransactionalSession();
    ISession GetDataWarehouseSession();
    void Release(ISession session);
}

Windsor 功能将自动生成一个实现该接口的类。

假设您有两个静态方法CreateTransactionalSessionCreateDataWarehouseSession,您可以注册您的工厂和会话,如下所示:

using Castle.Windsor;
using Castle.Facilities.TypedFactory;
using Castle.MicroKernel.Registration;

// ...

public static void Bootstrap(IWindsorContainer container)
{
    container
        .AddFacility<TypedFactoryFacility>()
        .Register(
                    Component.For<ISession>()
                            .UsingFactoryMethod(() => CreateTransactionalSession())
                            .Named("TransactionalSession")
                            .LifeStyle.PerWebRequest,
                    Component.For<ISession>()
                            .Named("DataWarehouseSession")
                            .UsingFactoryMethod(() => CreateDataWarehouseSession())
                            .LifeStyle.PerWebRequest,
                    Component.For<ICmsSessionFactory>()
                            .AsFactory()
                 );

然后,您可以为ICmsSessionFactory需要它们的 Controller 类创建一个属性。

于 2013-09-09T05:28:22.893 回答
1

我会使用NHibernate Facility 及其 ISessionManager

于 2013-09-09T13:36:37.770 回答