У меня есть страница с использованием впрыскивается службы BLL: простой сервис возвращает набор объектов с помощью функции, как это:ASP.NET: инъекции зависимостей и роли
public IMyService { List<Foo> All(); }
Существует реализация по умолчанию для обычных пользователей , Теперь мне нужно, чтобы пользователи из административной роли могли просматривать больше объектов с другой реализацией службы.
Где я могу настроить свою страницу для использования второй реализации?
Моего первым решения поставить зависимость от IUnityContainer на странице, и использовать его для разрешения зависимости:
[Dependency]
public IUnityContainer Container { get; set;}
Page_Init(..)
{
_myService = User.IsInRole(MyRoles.Administrators)
? Container.Resolve<IMyService>("forAdmins")
: Container.Resolve<IMyService>();
}
Но это очень некрасиво: это ServiceLocator и это ни масштабируемое ни проверяемые.
Как я могу справиться с этой ситуацией? Может быть, создать дочерний контейнер для каждой роли?
Как всегда, приятно! +1 – Steven