Я поднял этот вопрос раньше, но я все еще изо всех сил пытаюсь найти пример, в котором я могу раздобыть голову (пожалуйста, не просто скажите мне посмотреть проект архитектуры S # arp Architecture, по крайней мере, на некоторые направления).Как я могу реализовать NHibernate-сеанс для каждого запроса без зависимости от NHibernate?
До сих пор я достиг почти незнания невежества в своем веб-проекте. Мои хранилища классов (в моем проекте данных) принимают ISession в конструкторе:
public class ProductRepository : IProductRepository
{
private ISession _session;
public ProductRepository(ISession session) {
_session = session;
}
В моей global.asax я разоблачить текущую сессию и творю и утилизации сессии BeginRequest и EndRequest (это где у меня есть зависимость от NHibernate):
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory() {
return new Configuration()
.Configure()
.BuildSessionFactory();
}
protected MvcApplication() {
BeginRequest += delegate {
CurrentSessionContext.Bind(SessionFactory.OpenSession());
};
EndRequest += delegate {
CurrentSessionContext.Unbind(SessionFactory).Dispose();
};
}
и, наконец, мой StructureMap реестр:
public AppRegistry() {
For<ISession>().TheDefault
.Is.ConstructedBy(x => MvcApplication.SessionFactory.GetCurrentSession());
For<IProductRepository>().Use<ProductRepository>();
}
Казалось бы, мне нужна мои собственные общие реализации ISession и ISessionFactory, который я могу использовать в своем веб-проекте и вводить в свои репозитории?
Так просто пояснить - я использую NHibernate в своем слое репозитория и хочу использовать запрос на сеанс (http). Поэтому я ввожу ISession в мои конструкторы репозитория (используя структуру структуры). В настоящее время для создания и размещения сеансов в каждом запросе мне нужно ссылаться на NHibernate из моего веб-проекта. Это зависимость, которую я хотел бы удалить.
Спасибо, Бен
NHibernate согласно мне не плохой зависимости. –
Мой веб-проект ведет переговоры с хранилищем, а NHibernate - зависимость репозитория. Если бы не тот факт, что мне нужен сеанс для запроса, я мог бы просто открыть свои сеансы внутри слоя репозитория. Тем не менее, мне нужен сеанс для запроса, но я не хочу, чтобы мой веб-проект был привязан к NHibernate. –
Will Marcouiller: Это все еще зависимость. Зависимость - это зависимость. Что, если Бен захотел перенести свое приложение на CouchDB или MongoDB или использовать базу данных объектов в памяти? –