我有这个wcf方法
Profile GetProfileInfo(string profileType, string profileName)
和一条业务规则:
如果profileType是从数据库读取的"A“。
如果profileType是"B“,则从xml文件中读取。
问题是:如何使用依赖注入容器实现它?
发布于 2010-01-31 02:18:36
让我们首先假设您有一个类似如下的IProfileRepository:
public interface IProfileRepository
{
Profile GetProfile(string profileName);
}
以及两个实现:DatabaseProfileRepository
和XmlProfileRepository
。问题是您希望根据profileType的值选择正确的值。
您可以通过引入这个抽象工厂来做到这一点
public interface IProfileRepositoryFactory
{
IProfileRepository Create(string profileType);
}
假设已经将IProfileRepositoryFactory注入到服务实现中,您现在可以像这样实现GetProfileInfo方法:
public Profile GetProfileInfo(string profileType, string profileName)
{
return this.factory.Create(profileType).GetProfile(profileName);
}
IProfileRepositoryFactory的具体实现可能如下所示:
public class ProfileRepositoryFactory : IProfileRepositoryFactory
{
private readonly IProfileRepository aRepository;
private readonly IProfileRepository bRepository;
public ProfileRepositoryFactory(IProfileRepository aRepository,
IProfileRepository bRepository)
{
if(aRepository == null)
{
throw new ArgumentNullException("aRepository");
}
if(bRepository == null)
{
throw new ArgumentNullException("bRepository");
}
this.aRepository = aRepository;
this.bRepository = bRepository;
}
public IProfileRepository Create(string profileType)
{
if(profileType == "A")
{
return this.aRepository;
}
if(profileType == "B")
{
return this.bRepository;
}
// and so on...
}
}
现在你只需要让你选择的DI Container为你把所有的东西都连接起来……
https://stackoverflow.com/questions/2168704
复制相似问题