WCF中IServiceBehavior、IOperationBehaviour自定义接口中如何使用IServiceProvider?

How to use IServiceProvider in IServiceBehavior, IOperationBehaviour custom interfaces in WCF?

我有一个自定义的 .NET 框架库,它在我的 WCF 应用程序中用于不同的目的,例如日志记录、安全等。目前我们使用 Autofac in both cases, for the library and the WCF application as well. But recently we decided to move out Autofac and use Microsoft.Extensions.DependencyInjection.Abstractions 因为消费者可能想要使用不同的 DI 包。在我开始更改我们在整个应用程序中使用的某些属性之前,更改内容很容易。

例如,我们有一个如下所示的属性:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false)]
public sealed class SecurityBehaviorAttribute : Attribute, IServiceBehavior, IOperationBehavior
{
    private readonly ISecurityManager _securityManager;

    public SecurityBehaviorAttribute()
    {
        _securityManager = AutofacHostFactory.Container.Resolve<ISecurityManager>();
    }

    //Implemented methods
}

由于我们不再有 AutofacHostFactory.Container,我们需要另一种方式来获得这些服务,但我不确定 WCF 中是否有办法做到这一点?

在搜索时我发现了一些创建自定义 IInstanceProvider 的信息,这可能会有所帮助,但我仍然不确定它是如何工作的,因为我没有找到任何将它与抽象包集成的示例。因为在我的顶级应用程序中我们使用 Autofac.Integration.Wcf 我认为这个包在幕后为内部需求创建了一个自定义 IInstanceProvider ,如果是这样,我怎样才能将这个接口注入我的属性以及如何使用它( 这样消费者将负责创建自定义 IInstanceProvider,我将只在我的包裹中使用它)?

另一个丑陋的解决方案是创建 IServiceProvider 的单例实例并使用它(不确定它是否正常工作

总结:

  1. 是否有一种 good/straightforward 方法来解决 WCF 属性中的服务(如上)仅使用 Microsoft.Extensions.DependencyInjection.Abstractions ?

  2. 如果1)是不可能的。有没有办法获取由顶级应用程序创建的 IInstanceProvider 在这种情况下来自包的消费者)并在此处的属性中使用它?

  3. 创建 IserviceProvider 的静态对象是唯一的解决方案还是有其他无需大改动的好方法?

在尝试了很多方法之后,除了将 IServiceProvider 存储到静态 属性 中并重新使用它之外,我无法做任何其他工作。