2011-10-26 18 views
3

我有一个自定义IAuthorizationPolicy这对一个仓库进样依赖到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来处理我的应用程序中的所有其他依赖项。但我无法处理这种情况。

这可能吗?

回答

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; 
    } 
}