2014-07-13 95 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類的構造,所以不會注入依賴關係。在結構圖中,我們不需要繼承任何接口來創建類的對象。 –