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 中配置了所有细节。我确信我的结构图配置 100% 正常工作,期待创建这个 AclAuthorizationManager 类。因为我能够在其他类中应用 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 回答