我使用WindsorContainer和Nhibernet进行数据库访问。我使用以下代码在application_start事件上初始化容器,它可以在单个数据库中正常工作。
Container = new WindsorContainer();
ControllerBuilder.Current.SetControllerFactory(Container.Resolve<IControllerFactory>());
现在,我想在我的应用程序中使用另一个数据库。请建议我如何用不同的db初始化另一个容器(WindsorContainer)对象。
答案 0 :(得分:3)
在我的设置中,我有两个数据库,我将其称为“事务性”数据库和“数据仓库”数据库。
我有一个“会话工厂”界面:
public interface ICmsSessionFactory
{
ISession GetTransactionalSession();
ISession GetDataWarehouseSession();
void Release(ISession session);
}
Windsor功能将自动生成一个实现此接口的类。
假设您有两个静态方法CreateTransactionalSession
和CreateDataWarehouseSession
,您可以注册您的工厂和会话,如下所示:
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类的属性。
答案 1 :(得分:1)