.net 是否可以使用DI容器解决我的ClaimsAuthorizationManager

.net 是否可以使用DI容器解决我的ClaimsAuthorizationManager,.net,claims-based-identity,thinktecture-ident-model,.net,Claims Based Identity,Thinktecture Ident Model,我已经让我的自定义ClaimsAuthorizationManager使用标准配置文件设置工作,但我想将业务层服务注入到我的实现中,但我无法理解 <system.identityModel> <identityConfiguration> <claimsAuthorizationManager type="Authentication.AuthorizationManager, Assembly" />

我已经让我的自定义ClaimsAuthorizationManager使用标准配置文件设置工作,但我想将业务层服务注入到我的实现中,但我无法理解

<system.identityModel>
    <identityConfiguration>
        <claimsAuthorizationManager 
            type="Authentication.AuthorizationManager, Assembly" />
        <claimsAuthenticationManager 
            type="Authentication.ClaimsTransformer, Assembly" />
    </identityConfiguration>
<system.identityModel>
我尝试了这个问题的答案,以确保模块已加载

…但它们没有效果。我还想知道其中的信息是否注明日期,因为我的应用程序中已经有来自System.IdentityModel程序集的同名模块

我正在使用Thinktecture IdentityModel,但我看不到解决我问题的任何地方。这个问题似乎暗示了这一点,但并没有给我一个解决方案


我已经解决了null ClaimsAuthorization模块的问题,答案已过期,我需要使用System.IdentityModel.Services程序集中的claims auth模块。现在我可以注入ClaimsAuthManager,但是没有调用CheckAccess。

为了单元测试,我尝试了同样的方法。但也失败了。我认为这不值得花这么多时间。只需当场实例化业务服务并让它完成它的工作。

您可以处理一个事件-FederatedAuthentication.ServiceConfigurationCreated。这允许以编程方式设置claims authorization manager


请参见此处:

我将服务定位它,然后它仍然可以模拟进行测试。这不是问题,因为我正在服务定位授权管理器以初始化模块。我正在处理该事件。部分原因是我试图在配置中加载错误的模块,我试图使用Microsoft.IdentityModel.Services而不是较新的System.IdentityModel.Services。当我发现这一点时,我管理了get FederatedAuthentication.ClaimsAuthorizationModule以进行初始化,但当我在静态FederatedAuthentication对象上设置ClaimsAuthorizationManager时,从未调用CheckAccess方法。我已将实现还原为使用service locator,但我将返回并尝试在event args对象上设置管理器。这就像一个符咒,意味着我只需调用一次service locator即可解决ClaimsAthmanager,而不是它的依赖项的多个隐藏项。
FederatedAuthentication.ClaimsAuthorizationModule.ClaimsAuthorizationManager = DependencyConfig.Container.Resolve<ClaimsAuthorizationManager>();