我有一個Active Directory服務來幫助我管理ASP.NET MVC 3應用程序中的基本任務(雖然實際上它可以是任何.NET應用程序,因爲它是在一個單獨的程序集中)。我有一個基本接口和類,IActiveDirectoryService<TPrincipal>
和ActiveDirectoryService<TPrincipal>
。這些得到延長一個水平提高到IUserPrincipalService
和UserPrincipalService
,像這樣:如何擴展泛型?
IUserPrincipalService : IActiveDirectoryService<UserPrincipal> {
}
UserPrincipalService : ActiveDirectoryService<UserPrincipal>, IUserPrincipalService {
}
使用Ninject創建的IUserPrincipalService
單一實例傳入PrincipalContext
我希望它用。這很好,但我現在必須爲每個要添加用戶的OU創建多個實例,這對Ninject不起作用,因爲這些名稱會衝突。
我需要找到一種方法將這個服務傳遞給我想要的特定OU。我想過把界面擴展到像ICityStateUserPrincipalService : IUserPrincipalService
這樣的東西,並用Ninject改變構造函數。問題在於,我必須爲我們現在的每個OU(恰好是七個)提供這些服務之一。另外,將來如果我們需要添加一個新的OU,我必須在AD中創建它,然後爲它創建一個新的接口。
這只是感覺不對。它也必須在ASP.NET MVC 3應用程序中完成,這感覺就像它增加了膨脹和欺騙。我不能將它添加到我的程序集中,因爲我想保留該通用程序以防需要跨不同項目使用它。
有沒有辦法保持我現在擁有的東西,並使其具有可擴展性,以便我可以傳遞特定OU的路徑?
問題的標題可能不是很好。我願意改變它的建議,我只是不知道如何說出它...
您可以添加在傳遞到每個服務,指定IOUProvider界面概念冷落的
TPrincipal
哪些OU有興趣 – cordialgerm@pickles,你能給我一個代碼示例嗎?此刻,我的大腦已經成功地將自己弄糊塗了...... – Gup3rSuR4c