首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WCF依赖注入和抽象工厂

WCF依赖注入和抽象工厂
EN

Stack Overflow用户
提问于 2010-01-31 01:26:39
回答 1查看 8.8K关注 0票数 19

我有这个wcf方法

代码语言:javascript
复制
Profile GetProfileInfo(string profileType, string profileName)

和一条业务规则:

如果profileType是从数据库读取的"A“。

如果profileType是"B“,则从xml文件中读取。

问题是:如何使用依赖注入容器实现它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-31 02:18:36

让我们首先假设您有一个类似如下的IProfileRepository:

代码语言:javascript
复制
public interface IProfileRepository
{
     Profile GetProfile(string profileName);
}

以及两个实现:DatabaseProfileRepositoryXmlProfileRepository。问题是您希望根据profileType的值选择正确的值。

您可以通过引入这个抽象工厂来做到这一点

代码语言:javascript
复制
public interface IProfileRepositoryFactory
{
    IProfileRepository Create(string profileType);
}

假设已经将IProfileRepositoryFactory注入到服务实现中,您现在可以像这样实现GetProfileInfo方法:

代码语言:javascript
复制
public Profile GetProfileInfo(string profileType, string profileName)
{
    return this.factory.Create(profileType).GetProfile(profileName);
}

IProfileRepositoryFactory的具体实现可能如下所示:

代码语言:javascript
复制
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为你把所有的东西都连接起来……

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2168704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档