在我的应用程序中,我配置了像
这样的结构图 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。
我的代码有什么问题?
答案 0 :(得分:0)
根据我的经验,当你指定类型构造函数时必须说继承自接口。
因此,您应该替换此行:
ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>()
人:
ForConcreteType<AclAuthorizationManager>().Configure.Ctor<IResourceOperationAppService>().Is<ResourceOperationAppService>()
实现ResourceOperationAppService IResourceOperationAppService。
的位置