以下是ClaimsAuthenticationManager的骨架
namespace ABC
{
public class ClaimsTransformer : ClaimsAuthenticationManager
{
private IUow _iUow;
public ClaimsTransformer(IUow uow)
{
this._iUow = uow;
}
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
...
}
}
}
我将Unity.Mvc5用于IoC容器。注入依赖项适用于Controller。
但DI不适用于ClaimsAuthenticationManager。我收到以下错误
Parser Error Message: ID1024: The configuration property value is not valid.
Property name: 'type'
Error: 'Constructor on type 'ABC.ClaimsTransformer' not found.'
如何将依赖注入ClaimsAuthenticationManager?
答案 0 :(得分:1)
我没有使用Unity,但您可以在对象实例化不在您控制范围内的情况下使用ServiceLocator。在Application_Start()
中注册ServiceLocatorprotected void Application_Start()
{
UnityServiceLocator locator = new UnityServiceLocator(ConfigureUnityContainer());
ServiceLocator.SetLocatorProvider(() => locator);
}
private static IUnityContainer ConfigureUnityContainer()
{
UnityContainer container = new UnityContainer();
container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
return container;
}
然后在您的ClaimsTransformer中,您应该能够调用ServiceLocator来解析您的ClaimsTransformer中的Uow
public class ClaimsTransformer : ClaimsAuthenticationManager
{
public IUow UnitOfWork
{
get { return ServiceLocator.Current.GetInstance<IUow>(); }
}
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
...
}
}
有关详细信息,请参阅CommonServiceLocator。
Here用于Unity实施。
Nuget:PM&gt; Install-Package CommonServiceLocator.UnityAdapter
我没有运行此代码,但它应该指向正确的方向。