gpt4 book ai didi

wcf - 将依赖项注入(inject) IAuthorizationPolicy

转载 作者:行者123 更新时间:2023-12-02 04:05:26 25 4
gpt4 key购买 nike

我有一个自定义的 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 无法注入(inject)所需的对象。
它需要一个无参数的构造函数。

我正在使用 StructureMap 并有一个自定义 IInstanceProvider 来处理我的应用程序中的所有其他依赖项。但我无法让它处理这种情况。

这个可以吗??

最佳答案

我最终通过使用自定义 ServiceHost 和 ServiceHostFactory 解决了这个问题。
工厂将 IoC 容器发送到服务主机,服务主机通过对容器的引用添加新策略。现在策略可以使用容器来获取它需要的对象。

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

关于wcf - 将依赖项注入(inject) IAuthorizationPolicy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com