1

我目前正在使用Unity IOC容器開發基於DDD的應用程序,並且需要將我的自定義主體對象傳遞到允許進行單元測試的存儲庫和服務層。這應該怎麼做?我目前的想法是在IPrincipal類型的服務和存儲庫類上創建一個屬性。然後在Application_Start上使用Unity來設置並傳入Principal。DDD:將IPrincipal注入服務和存儲庫層

其中之一,我在思考的正確軌道上?

二,如果不是在application_start,這似乎是不正確的地方,因爲我需要一個人在注射發生之前首先登錄,這應該發生在哪裏?

三,對於Unity,container.RegisterType看起來應該從Thread.CurrentPrincipal還是HttpContext.Current.User獲取主體?

+0

什麼是您的業務的主體?看起來你正在用技術術語污染你的域模型,或者你錯過了一個有界的上下文。 – plalx 2014-11-17 13:56:06

+0

委託人是指當前登錄用戶的用戶憑證。 – user1790300 2014-11-18 17:57:13

+0

這使得你意識到委託人可能不是一個商業術語,這更多的是一個反問的問題。這個概念應該被翻譯成對你的域名有意義的概念。你將與​​校長進行什麼樣的操作? – plalx 2014-11-18 19:06:43

回答

0

您可以擁有PrincipalDto類,該類將包含需要在服務層中使用的相關IPrincipal屬性,並將IPrincipal中的值映射到PrincipalDto。這樣您就不需要將IPrincipal的引用程序集包含到其他圖層中。

下面是一個使用自動映射的例子。

public class PrincipalDto 
{ 
    public UserId { get; set; } 
    public Username { get; set; } 
    public RoleId { get; set; } 
} 

public class SomeService 
{ 
    public void SomeServiceMethod(PrincipalDto principal) 
    { 
     // do work here 
    } 
} 

public class SomeConsumer() 
{ 
    public void SomeConsumerMethod() 
    { 
     // where User is the IPrincipal object instance 
     var principal = Mapper.Map<PrincipalDto>(User); 

     var service = new Service(); 
     service.SomeServiceMethod(principal); 
    } 
} 
+0

唯一要做的就是我正在嘗試在不傳遞參數的情況下無縫地使服務層和存儲庫層知道用戶。 – user1790300 2014-11-07 15:40:49