0

私のアプリケーションでは、構造マップを次のように構成しました

 public class DefaultRegistry : Registry {
        #region Constructors and Destructors

        public DefaultRegistry() {
            Scan(
                scan => {
                    scan.Assembly("Eterp.Data.ErpCore");
                    scan.Assembly("Eterp.Data.Seed");
                    scan.Assembly("Eterp.Application.ErpCore");
                    scan.TheCallingAssembly();
                    scan.WithDefaultConventions();
                });


            ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>()
        }

        #endregion
    }

そして、私にはクラスがあります

public class AclAuthorizationManager : ClaimsAuthorizationManager
    {
        private readonly IResourceOperationAppService _resourceOperationAppService;



        public AclAuthorizationManager(IResourceOperationAppService resourceOperationAppService)
        {
            _resourceOperationAppService = resourceOperationAppService;
        }

        public override bool CheckAccess(AuthorizationContext context)
        {
            var isCurrentUserAuthorized = context.Principal.Identity.IsAuthenticated;

            return isCurrentUserAuthorized && _resourceOperationAppService.CanAccessResource(context.Action.FirstOrDefault().Value, context.Principal.Claims);
        }
    }

このクラスは、アプリケーションで使用するカスタム クレーム承認クラスですが、アプリケーションを実行すると、コンストラクターに必要なパラメーターが不足していることに関連するエラーが発生します (このクラスには、パラメーター タイプ IResourceOperation のコンストラクターがあります)。しかし、私はすでにすべての詳細を structureMap に設定しています。この AclAuthorizationManager クラスの作成を期待して、私の構造マップ構成が 100% うまく機能していると確信しています。なぜなら、他のクラスで DI を適用できるからです。

私のコードの間違った部分は何ですか?

4

1 に答える 1

0

私の経験では、型コンストラクターを指定するときは、インターフェイスから継承する必要があります。

したがって、次の行を置き換える必要があります。

ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>()

に:

ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>().Is<ResourceOperationAppService>()

ResourceOperationAppService IResourceOperationAppService の実装はどこにありますか。

于 2014-07-13T15:10:31.710 に答える