Я пытаюсь передать свой unitofwork в мой базовый репозиторий, но когда я пытаюсь вызвать некоторые методы, unitofwork не передается в базовый репозиторий.
Сценарий: я впрыскиваю userRepository ниже в мой UserController все хорошо, его когда он вызывает userRepository.Save (user), он терпит неудачу из-за null unitofwork. Хотя я не уверен, почему?
Я использую nhibernate и Structuremap. Я думаю, что я все правильно подключил, но вот код для двойной проверки:
Вот базовый репозиторий:
public class BaseRepository<T> : IRepository<T> where T : IAggregateRoot
{
private readonly IUnitOfWork _unitOfWork;
public BaseRepository(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public BaseRepository()
{}
public void Save(T Entity)
{
_unitOfWork.Session.Save(Entity);
}
}
Специальный репозиторий:
public class UserRepository : BaseRepository<User>, IUserRepository
{
}
Это моя конфигурация структуры карты nhibernate:
public NhibernateRegistry()
{
For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();
For(typeof(IRepository<>)).Use(typeof(BaseRepository<>));
// Nhibernate Session
For<ISession>().HybridHttpOrThreadLocalScoped().Use(context => context.GetInstance<ISessionFactory>().OpenSession());
// Nhibernate SessionFactory
For<ISessionFactory>().Singleton().Use(NhibernateHelper.CreateSessionFactory());
}`
Вот мой http-модуль nhibernate:
public class NHibernateModule : IHttpModule
{
private IUnitOfWork _unitOfWork;
public void Init(HttpApplication context)
{
context.BeginRequest += ContextBeginRequest;
context.EndRequest += ContextEndRequest;
}
private void ContextBeginRequest(object sender, EventArgs e)
{
_unitOfWork = ObjectFactory.GetInstance<IUnitOfWork>();
}
private void ContextEndRequest(object sender, EventArgs e)
{
try { _unitOfWork.Commit(); }
catch { _unitOfWork.Rollback(); }
finally { Dispose(); }
}
public void Dispose()
{
if (_unitOfWork != null)
_unitOfWork.Dispose();
}
}