2

我想向 ServiceAuthorizationManager 实现注入一个存储库(使用统一)。可能吗?

 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;
            }
        }
4

1 回答 1

1

您不必APIKeyAuthorization在容器中注册。Unity 可以自己很好地解析具体的类。如果你想将你的注入APIKeyAuthorization作为另一个实现,ServiceAuthorizationManager你必须在容器中注册该映射

container.RegisterType<ServiceAuthorizationManager, APIKeyAuthorization>();

Unity 会将已注册的实现IKeyService(在您的情况下是 的实例KeyService)注入APIAuthorization.

尝试

APIAuthorization auth = container.Resolve<APIAuthorization>();

您将看到 UnityIKeyService为您解决问题。

但请不要误将Unity 作为 ServiceLocator 滥用

而是将容器连接到应用程序的组合根中,并仅解析容器中的顶级对象。

于 2012-06-25T16:28:26.380 回答