【发布时间】:2015-09-10 02:59:34
【问题描述】:
我们有 2 个OpenLdap 服务器。一个是最新的开箱即用版本。另一个是较旧的高度定制版本。
两种实现都遵循类似的逻辑。以连接为例。
界面如下
namespace Infrastructure.Interfaces
{
public interface ISessionService
{
LdapConnection GetConnection();
}
}
每个实现都将使用此接口来获取连接。
新服务器
namespace Infrastructure.NewLdap.Service
{
public class SessionService : ISessionService
{
LdapConnection GetConnection()
{
.....
}
}
}
旧服务器
namespace Infrastructure.OldLdap.Service
{
public class SessionService : ISessionService
{
LdapConnection GetConnection()
{
.....
}
}
}
每个实现都在不同的项目中。每个项目都会有一个不同的app.config 以及正确的凭据等。除此之外,还有一个IConfigService,它会将所有凭据等从app.config 加载到其中。
namespace Infrastructure.Interfaces
{
public interface IConfigService
{
string ServerAddress { get; }
...
...
}
}
同样,每个项目都有自己的实现。
每个项目中的存储库会有所不同,因为我们在每个服务器中访问数据的方式不同。旧服务器将仅用于查询,因此我们使用它将用户导入新服务器。
我将如何使用Simple Injector 将这些服务注入同一个接口,但根据使用的存储库,将引入正确的实现?有道理吗?
-
Infrastructure.OldLdap.SomeRepo使用Interfaces.ISessionService注册OldLdap.Service.SessionService -
Infrastructure.NewLdap.SomeOtherRepo使用Interfaces.ISessionService注册NewLdap.Service.SessionService
这是否可能,这是否也破坏了Liskov Substitution Principle。
我最好把每个实现都写成自己的东西吗?如果是这样,这会不会违反DRY 原则?
希望这不是太笼统,提前谢谢您。
【问题讨论】:
标签: c# ioc-container dry simple-injector solid-principles