Я следующий глобальный код фильтра:Как получить обновленный объект с NHibernate сессии в Global Filter
public class UserAuthorizationFilter : FilterAttribute, IAuthorizationFilter
{
private readonly IAdministratorService _administratorService;
public UserAuthorizationFilter()
{
_administratorService = IoCFactory.Container.GetInstance<IAdministratorService>();
}
public void OnAuthorization(AuthorizationContext filterContext)
{
string username = HttpContext.Current.User.Identity.Name;
IRequestMessage<string> request = MessageFactory.BuildRequestFor(username, username);
Administrator administrator = _administratorService.GetDetailByName(request).Data;
filterContext.Controller.ViewBag.Username = username;
filterContext.Controller.ViewBag.IsAdmin = administrator != null;
if (administrator != null)
{
bool isManageRole = administrator.Roles.Any(r => r.IsManageRole);
bool isManageAdministrator = administrator.Roles.Any(r => r.IsManageAdministrator);
bool isManageReviewer = administrator.Roles.Any(r => r.IsManageReviewer);
filterContext.Controller.ViewBag.IsManageRole = isManageRole;
filterContext.Controller.ViewBag.IsManageAdministrator = isManageAdministrator;
filterContext.Controller.ViewBag.IsManageReviewer = isManageReviewer;
}
}
}
и я добавить этот фильтр в случае Application_Start из global.asax:
GlobalFilters.Filters.Add(new UserAuthorizationFilter(), 0);
Когда Я обновляю свойство роли администратора, например IsManageRole от true
до false
, данные были успешно обновлены до базы данных. Тем не менее в UserAuthorizationFilter
свойство свойства в объекте администратора не обновляется, его нагрузка true
значение. Я попытался позвонить sessionFactory.Evict(typeof(Role))
, session.Clear()
, но не нашел удачи. Однако данные не будут загружать новое обновленное свойство Role. свойство было обновлено, если я перезапущу веб-приложение.
Как это решить? Почему кеш nhibernate не будет ясным и обновленным с функциями выше, любым предложением? Пожалуйста, помогите ..
Спасибо, этот ответ действительно помогает мне фиксировать мой DI для фильтров с использованием 'IFilterProvider'. Кроме того, я сделал взломанные изменения, как работает мой IoC, теперь я использую 'IDependencyResolver'. Также у меня есть этот объект администрирования с использованием хранилища сеансов. –
Замечательно видеть, что сэр! Наслаждайтесь потрясающим NHibernate;) –