我认为我的问题的解决方案在这里得到了很好的解决:
Property injection in custom membership provider using Castle
如果我搜索 MembershipProvider 而不是 RoleProvider 可能会在第一次找到它。
总结一下我的解决方案,该链接将我带到 codeplex 的 Common Service Locator library。
它和它的 Unity 适配器包含在 Unity 3 的 Nuget 包中。所以我已经有了它。
我在我的 CompositionRoot 类的 Compose() 方法的末尾添加了一行:
var locator = new UnityServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => locator);
我现在可以通过 RoleProvider 的构造函数中的静态 ServiceLocator 类访问定位器/容器:
public IAuthorizationManager Manager {get; set;}
public MyRoleProvider()
{
var locator = ServiceLocator.Current;
Manager = locator.GetInstance<IAuthorizationManager>();
}
(当然,您需要 Microsoft.Practices.ServiceLocation 的“使用”语句)