我们有一个使用WCF-WebHttp适配器的BizTalk应用程序。
我们需要使用需要依赖注入的自定义ServiceAuthorizationManager并具有一些可配置的参数。
为此,我们使用自定义行为设置自定义授权管理器:
internal class CustomAuthorizationServiceBehavior : IServiceBehavior
{
CustomAuthorizationConfiguration configuration;
public CustomAuthorizationServiceBehavior(CustomAuthorizationConfiguration configuration)
{
this.configuration = configuration;
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
var repository = ... //should be injected
serviceHostBase.Authorization.ServiceAuthorizationManager = new CustomAuthorizationManager(repository, configuration);
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}
问题:
如何正确进行依赖注入?
可以在 AddBindingParameters 方法中设置自定义授权管理器吗?
它目前正在运行,但我不确定它是否符合该方法的使用方式。另一方面,如果我们在 ApplyDispatchBehavior 方法中设置授权管理器,那么我认为我们必须显式调用serviceHostBase.Authorization.ApplyDispatchBehavior,以确保授权管理器应用于DispatchRuntime所有的终点。因此,ApplyDispatchBehavior将被调用两次。无论哪种方式看起来像一个黑客。根据WCF原则推荐的方法是什么?