我想向ServiceAuthorizationManager实现注入一个存储库(使用unity)。有可能吗?
public class APIKeyAuthorization : ServiceAuthorizationManager
{
private readonly IKeysService _keysService;
public APIKeyAuthorization(KeysService keysService)
{
_keysService = keysService;
}
protected override bool CheckAccessCore(OperationContext operationContext)
{
//var _keysService = new KeysService();
string key = GetAPIKey(operationContext);
string endpoint = GetEndpoint(operationContext); //ip address
if (_keysService.IsValidKey(key, endpoint))
{
return true;
}
else
{
// Send back an HTML reply
CreateErrorReply(operationContext, key);
return false;
}
}发布于 2012-06-26 00:28:26
您不必在容器中注册APIKeyAuthorization。Unity可以自己很好地解决具体的类。如果希望将APIKeyAuthorization作为ServiceAuthorizationManager的另一个实现注入,则必须向容器注册该映射
container.RegisterType<ServiceAuthorizationManager, APIKeyAuthorization>();Unity将把已注册的IKeyService实现(在您的例子中是KeyService的实例)注入到APIAuthorization的构造函数中。
试一试
APIAuthorization auth = container.Resolve<APIAuthorization>();您将看到Unity为您解析IKeyService。
但请不要对abuse Unity as a ServiceLocator犯这个错误。
相反,在composition root of your application中连接容器并仅解析来自容器的顶级对象。
https://stackoverflow.com/questions/11192610
复制相似问题