structureMap依赖注入不起作用

时间:2014-07-13 03:27:23

标签: asp.net asp.net-mvc structuremap structuremap3

在我的应用程序中,我配置了像

这样的结构图
 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。

我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

根据我的经验,当你指定类型构造函数时必须说继承自接口。

因此,您应该替换此行:

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

人:

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

实现ResourceOperationAppService IResourceOperationAppService。

的位置