2

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

1 に答える 1

1

APIKeyAuthorizationコンテナに登録する必要はありません。Unity は、具象クラスを単独で適切に解決できます。APIKeyAuthorizationを別の実装として注入したい場合はServiceAuthorizationManager、そのマッピングをコンテナに登録する必要があります

container.RegisterType<ServiceAuthorizationManager, APIKeyAuthorization>();

Unity は の登録済み実装IKeyService(あなたの場合は のインスタンスKeyService) を のコンストラクターに挿入しますAPIAuthorization

試す

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

そして、Unity が解決IKeyServiceしてくれることがわかります。

ただし、 Unity を ServiceLocator として悪用しないでください。

代わりに、アプリケーションのコンポジション ルートでコンテナーを接続し、コンテナーからトップ レベルのオブジェクトのみを解決します。

于 2012-06-25T16:28:26.380 に答える