我有这个wcf方法
Profile GetProfileInfo(string profileType,string profileName)
和业务规则:
如果profileType是从数据库读取的“A”。
如果profileType是从xml文件读取的“B”。
问题是:如何使用依赖注入容器来实现?
我们首先假设你有一个这样的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容器选择将其全部连接起来…
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。