【发布时间】:2011-03-18 07:43:12
【问题描述】:
我有一个使用注入 BLL 服务的页面:一个简单的服务返回一组对象,其函数如下:
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,既不可扩展也不可测试。
我该如何处理这种情况?也许为每个角色创建一个子容器?
【问题讨论】:
标签: c# asp.net dependency-injection unity-container roles