Я использую код Unity MVC3 на http://unitymvc3.codeplex.com/, чтобы иметь сеанс NHibernate для каждого экземпляра запроса IUnitOfWork.
Он работал несколько недель назад, я внес некоторые изменения, и теперь у моего IUnitOfWork, похоже, статическое время жизни.
Из моего global.asax.cs:
private static IUnitOfWorkFactory _UoWFactory = new UnitOfWorkFactory(Enums.Databases.MyDBName)
.AddMapping<DepartmentMap>()
.CompleteConfiguration();
/// <summary>
/// Configure Unity Application Block
/// </summary>
private void ConfigureUnity()
{
CIUnity.UnityContainer.Container = new UnityContainer()
.RegisterType(typeof(IRepository<>), typeof(Repository<>))
.RegisterType<IUnitOfWork, UnitOfWork>(Enums.Databases.MyDBName.ToString(), new HierarchicalLifetimeManager(), new InjectionConstructor(Enums.Databases.MyDBName))
.RegisterInstance<IUnitOfWorkFactory>(Enums.Databases.MyDBName.ToString(), _UoWFactory);
DependencyResolver.SetResolver(new UnityDependencyResolver(CIUnity.UnityContainer.Container));
}
ConfigureUnity()
вызывается из моего Application_Start()
Вот мой тестовый код из моего конструктора HomeController:
private IUnitOfWork uow;
private IUnitOfWork uow2;
public HomeController()
{
uow = CIUnity.Container.Resolve<IUnitOfWork>(Enums.Databases.MyDBName.ToString());
IRepository<Employee> repo = uow.GetRepository<Employee>();
uow2 = CIUnity.Container.Resolve<IUnitOfWork>(Enums.Databases.MyDBName.ToString());
IRepository<Department> deptrepo = uow2.GetRepository<Department>();
var q = from a in repo.Find()
select a;
var d = from b in deptrepo.Find()
select b;
}
... IUnitOfWork разрешается в том же экземпляреоднако при последующих запросах страницы новый IUnitOfWork не создается ... но код работает, поэтому он каким-то образом регистрирует / вытягивает объект, чтобы он работал статично.