我创建了一个 Active Directory 服务来帮助我从 ASP.NET MVC 3 应用程序中管理基本任务(尽管实际上它可以是任何 .NET 应用程序,因为它位于单独的程序集中)。我有一个基本接口和类,IActiveDirectoryService<TPrincipal>
并且ActiveDirectoryService<TPrincipal>
. 这些被扩展一级到IUserPrincipalService
and UserPrincipalService
,如下所示:
IUserPrincipalService : IActiveDirectoryService<UserPrincipal> {
}
UserPrincipalService : ActiveDirectoryService<UserPrincipal>, IUserPrincipalService {
}
IUserPrincipalService
使用 Ninject 我创建了一个传入PrincipalContext
我希望它使用的单例实例。这工作得很好,但我现在必须为每个要添加用户的 OU 创建多个实例,这不适用于 Ninject,因为名称会发生冲突。
我需要找到一种方法将我想要的特定 OU 传递给该服务。我考虑过将接口扩展为类似的东西,ICityStateUserPrincipalService : IUserPrincipalService
并用 Ninject 更改构造函数。这样做的问题是,我必须为我们现在拥有的每个 OU(恰好是七个)提供这些服务之一。另外,将来如果我们需要添加一个新的OU,我必须在AD中创建它,然后为它创建一个新的接口。
这只是感觉不对。它还必须在 ASP.NET MVC 3 应用程序中完成,这感觉就像它增加了膨胀和作弊。我无法将它添加到包含当前服务的程序集中,因为我想保留它的通用性,以防我需要在不同的项目中使用它。
有没有办法既保留我现在拥有的东西,又使其可扩展,以便我可以通过特定 OU 的路径?
问题的标题可能根本不是很好。我愿意接受改变它的建议,我只是不知道如何表达它......