2014-07-13 58 views
0

在我的应用程序配置structuremap像strucutreMap依赖注入不工作

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

这个类是定制要求授权类使用我的应用程序,但是当我exceuting应用程序,我得到一个错误,这与构造函数所需的缺少参数有关(该类具有参数类型为IResourceOperation的构造函数)。但我已经在structureMap中配置了所有的细节。我相信我的结构图配置在100%的工作状态下很好地期望创建这个AclAuthorizationManager类,因为我能够在其他类中应用DI。

我的代码中出现了什么问题?

回答

0

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

因此,你应该更换这行:

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

通过:

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

在哪里执行ResourceOperationAppService IResourceOperationAppService。

+0

实际上问题解决了,在我的情况下,由.Net运行时处理Authorization类的构造,所以不会注入依赖关系。在结构图中,我们不需要继承任何接口来创建类的对象。 –