Я работаю над приложением Asp.Net MVC 3 с использованием Fluent NHibernate. Я просто пытаюсь добавить контейнер IoC с помощью StructureMap.
Я реализовал фабрику настраиваемых контроллеров, которая использует StructureMap для создания контроллера и внедрения зависимостей. Каждый конструктор контроллера принимает одну или несколько служб, которые, в свою очередь, принимают DAO в качестве аргумента конструктора. Каждый конструктор DAO принимает ISessionFactory.
Для моего реестра StructureMap NHibernate у меня есть следующее:
internal class NHibernateRegistry : Registry
{
public NHibernateRegistry()
{
var connectionString = ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString;
For<ISessionFactory>()
.Singleton()
.Use(x => new AppSessionFactory().GetSessionFactory(connectionString));
For<ISession>()
.HybridHttpOrThreadLocalScoped()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
}
}
public class AppSessionFactory
{
public ISessionFactory GetSessionFactory(string connectionString)
{
return GetConfig(connectionString)
.BuildSessionFactory();
}
public static FluentConfiguration GetConfig(string connectionString)
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(x => x.Is(connectionString)))
.Mappings(
x => x.FluentMappings.AddFromAssemblyOf<AppEntity>());
}
}
Все это отлично работает для одной базы данных и одной фабрики сеанса. Однако приложение использует несколько баз данных.
Как лучше всего с этим справиться?