我有一个自定义IAuthorizationPolicy,它依赖于存储库
internal class CustomAuthorizationPolicy : IAuthorizationPolicy
{
private IBaseRepository _baseRepository;
public CustomAuthorizationPolicy(IBaseRepository baseRepository)
{
_baseRepository = baseRepository;
}
}
在web.config
中配置如下 <serviceAuthorization principalPermissionMode="Custom">
<authorizationPolicies>
<add policyType="CustomAuthorizationPolicy" />
</authorizationPolicies>
</serviceAuthorization>
此操作失败,因为WCF在创建策略时无法注入所需对象。 它需要一个无参数的构造函数。
我正在使用StructureMap并且有一个自定义的IInstanceProvider来处理我的应用程序中的所有其他依赖项。但我无法理解这种情况。
这可能吗?
答案 0 :(得分:1)
我最终使用自定义ServiceHost和ServiceHostFactory解决了这个问题。 工厂将IoC容器发送到servicehost,后者将添加新策略以及对容器的引用。现在,策略可以使用容器来获取所需的对象。
public class CustomServiceHost : ServiceHost
{
public CustomServiceHost(IContainer container, Type serviceType, params Uri[] baseAddresses)
: base(serviceType, baseAddresses)
{
// Keep existing policies
var policies = new List<IAuthorizationPolicy>();
if (Authorization.ExternalAuthorizationPolicies != null)
{
policies.AddRange(Authorization.ExternalAuthorizationPolicies);
}
// Add new policy
policies.Add(new PasswordAuthorizationPolicy(container));
Authorization.ExternalAuthorizationPolicies = policies.AsReadOnly();
// Set correct mode
this.Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom;
}
}