Я очень новичок, но стремлюсь изучить nhibernate и DI с Structuremap, поэтому я создаю приложение для проверки всего.
У меня возникли проблемы с добавлением моего unitofwork в мой базовый репозиторий.Я создаю unitofwork для каждого запроса, а затем фиксирую или откатываю в конце.Но когда пытаешься внедрить в мой базовый репозиторий, он всегда пуст, когда я использую его в моих методах.Более конкретно я получаю эту ошибку: «Ссылка на объект не установлена на экземпляр объекта».Любые идеи, что я делаю не так, и если это правильный маршрут, я должен идти?
Большое спасибо заранее.
Базовый репозиторий:
public abstract class Repository<T> : IRepository<T>
{
public readonly IUnitOfWork _unitOfWork;
public Repository(IUnitOfWork UnitOfWork)
{
UnitOfWork = _unitOfWork;
}
public Repository() {}
public void Save(T obj)
{
_unitOfWork.CurrentSession.Save(obj);
}
}
Реестр StructureMap вот и всеустановите в моем application_start:
public class NHibernateRegistry : Registry
{
public NHibernateRegistry()
{
For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();
For<ISession>().HybridHttpOrThreadLocalScoped().Use(context => context.GetInstance<ISessionFactory>().OpenSession());
For<ISessionFactory>().Singleton().Use(NHibernateSessionFactory.GetSessionFactory());
}
}
Обновление:
Базовый репозиторий наследуется определенными репозиториями, т.е. ArticleRepository, а затем внедряет это в мои aspx-страницы на application_start.Тогда моя страница aspx наследует базовую страницу, где происходит buildUp.И я получаю доступ к хранилищу, как это:
public IArticleRepository ArticleRepo { get; set; }
public void SaveThing()
{
ArticleRepo.Save(object);
}
Это вызывается на application_start:
public class Bootstrapper
{
public static void BootStrap()
{
ObjectFactory.Configure(x =>
{
x.AddRegistry<NHibernateRegistry>();
x.AddRegistry<WebRegistry>();
});
}
}
И в веб-реестре:
For<IArticleRepository>().Use<ArticleRepository>();