Я хотел бы узнать, как исправить сборку и обработку с помощью репозитория NHibernate и сеанса в классах моделей представлений.
Например, я использую платформу Caliburn Micro с усилителем Castle Windsor.
Сначала я создалРепозиторий NHibernate:
public interface IRepository{//I omitted not needed code for simplification}
public class NHibRepository: IRepository
{
private ISession _session;
public NHibRepository(ISession session)
{
_session=session;
}
// I omitted not needed code for simplification
}
Во-вторых, я определил некоторый класс POCO и класс отображения с Fluent NHibernate.
public class User{}
public class Profile{}
public class Album{}
public class UserMap : ClassMap<User>{}
public class ProfileMap : ClassMap<Profile>{}
public class AlbumMap : ClassMap<Album>{}
Теперь мне нужно использовать репозитории NHibernate в моих моделях представления.
public interface IViewModelA{}
public class ViewModelA : ScreenViewModel, IViewModelA
{
public NHibRepository<User> UserRepo{get;set;}
public NHibRepository<Profile> ProfileRepo{get;set;}
}
public interface IViewModelB{}
public class ViewModelB : Screen, IViewModelB
{
public NHibRepository<Profile> ProfileRepo{get;set;}
public NHibRepoistory<Album> AlbumRepo{get;set;}
}
Когда я создаю класс репозитория для некоторого класса сущностей, мне нужно передать сессию в NHibRepository construtor.
UserRepo= new NHibRepository<User>(NHIBERNATE SESSION);
До сих пор я использовал некоторый вспомогательный класс для создания сеанса Nhibernate и репозитория init.
Вспомогательный класс здесь:
public class FluentNHibHelper
{
private ISessionFactory _sessionFactory;
public FluentNHibHelper(IPersistenceConfigurer db, Assembly asm)
{
InitializeSessionFactory(db, asm);
}
private void InitializeSessionFactory(IPersistenceConfigurer db, Assembly asm)
{
_sessionFactory = Fluently.Configure()
.Database(db)
.Mappings(m => m.FluentMappings.AddFromAssembly(asm))
.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true))
.BuildSessionFactory();
}
public ISession OpenSession()
{
return _sessionFactory.OpenSession();
}
}
с этим классом я создал класс репозитория:
private const string ConnString =
@"Server=TestMachine\SQLEXPRESS;Database=TEST;Trusted_Connection=True;";
UserRepo = new NHibRepository<User>(
new FluentNHibHelper(MsSqlConfiguration.MsSql2008.ConnectionString(ConnString),
Assembly.GetExecutingAssembly())
.OpenSession());
Теперь я запутался, у меня нет лучшего способа создания объекта репозиторияв моделях зрения.
Например, в классе начальной загрузки я могу как-то зарегистрировать класс репозитория?
public class CastleBootstrapper : Bootstrapper<IShellViewModel>
{
private IWindsorContainer _windsorContainer;
protected override void Configure()
{
_windsorContainer = new WindsorContainer();
//register repository class here ???
}
}
Кто-нибудь может мне помочь?Большое спасибо
Извините за мой английский.