У меня есть , следуя шаблону на этом сайте , чтобы подключить ninject и nhibernate к моему сайту asp.net-mvc3.
Вот код в моем global.aspx.cs:
internal class ServiceModule : NinjectModule
{
public override void Load()
{
var helper = new NHibernateHelper(connectionString);
Bind<ISessionFactory>().ToConstant(helper.SessionFactory)
.InSingletonScope();
Bind<IUnitOfWork>().To<UnitOfWork>()
.InRequestScope();
Bind<ISession>().ToProvider(new SessionProvider())
.InRequestScope();
Bind<IIntKeyedRepository<FAQ>>().To<Repository<FAQ>>()
.InRequestScope();
}
проблема в том, что мне теперь нужно выполнить Update () и Add () в моих контроллерах;
У меня есть это в качестве кода моего контроллера:
public FAQController(IIntKeyedRepository<FAQ> faqRepository, IUnitOfWork unitOfWork)
{
_faqRepository = faqRepository;
_unitOfWork = unitOfWork;
}
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult AddFAQ(FAQ contact)
{
var c = new FAQ {Question = contact.Question, Answer = contact.Answer};
_faqRepository.Add(c);
_unitOfWork.Commit();
return RedirectToAction("Index");
}
Мой главный вопрос заключается в том, что неправильно вводить Iunitofwork в конструкторе, так как многим другим действиям это не нужно.Мне это действительно нужно только для действий, где я делаю обновления и вставки в мою базу данных.Так как я использую недействительный IOC по вышеуказанной ссылке, кажется, что он передает этот объект unitofwork через IOC.
Итак, есть ли более оптимизированный способ использования шаблона UnitOfWork с IOC в asp.net-mvcэто вызывает транзакцию для каждого метода в моем контроллере.