gpt4 book ai didi

c# - WCF 服务可测试性和依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 21:01:21 25 4
gpt4 key购买 nike

我有一个托管在 MVC 应用程序 中的 WCF 服务。服务与几个存储库(我有代码优先设计)交互来完成它的工作。目前我在每个 Service 方法中创建了所有 Repository 类的实例,我认为这很糟糕并且我的 Service 完全耦合到 Repository 类。我想知道我应该如何为 WCF 服务实现一个漂亮干净的 DI。

提前致谢。

最佳答案

您可以采用的一种方法是在您的服务类中注入(inject)一个存储库工厂,然后从该工厂调用/获取您的存储库。

存储库工厂:

public interface IRepositoryFactory
{
IRepositoryOne GetRepositoryOne();
IRepositoryTwo GetRepositoryTwo();
}

public class RepositoryFactory: IRepositoryFactory
{
public DataAccess.RepositoryInterfaces.IRepositoryOne GetRepositoryOne()
{
return new RepositoryOne();
}
public DataAccess.RepositoryInterfaces.IRepositoryTwo GetRepositoryTwo()
{
return new RepositoryTwo();
}
}

服务等级:

public ServiceClass: IService
{

private readonly IRepositoryFactory _repositoryFactory;

public ServiceClass(IRepositoryFactory factory)
{
_repositoryFactory = factory;
}

public IList<YourItems> GetYourItems()
{
var repository = _repositoryFactory.GetRepositoryOne();
return repository.GetItems(....);
}
}

使用这种方法,您只需要注册和解析您的存储库工厂,而不是所有单独的存储库。这是一种混合方法,但我认为它非常简洁且易于理解。当然,您可以始终不使用工厂并在每次调用时解析您的存储库。如果您愿意,我也可以展示其中的示例。

关于c# - WCF 服务可测试性和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14222324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com