我有一个带有标准 IoC 设置的 MVC 项目,它使用 StructureMap 将存储库注入控制器构造函数。
我还决定我想要一个静态“实用程序”类,我可以在其中拥有可由不同控制器调用的通用方法。例如,我有:
public static IEnumerable<CountryCode> GetCountryList()
{
ICountryCodeRepository repo = ObjectFactory.GetInstance<ICountryCodeRepository>();
IEnumerable<CountryCode> countries = repo.GetAll();
return countries;
}
如您所见,这直接从 ObjectFactory 创建了一个 repo 对象。现在的问题是,当我想对控制器进行单元测试时,我可以模拟控制器的存储库,但不能模拟实用程序类中的存储库(控制器最终调用它)我确信还有其他原因我的实用程序类是错误的,但这是我目前看到的。我也读过一些东西说我的设计很糟糕,我只是不知道如何解决它。
我正在考虑让 GetCountryList() 函数接受一个 repo 对象
GetCountryList(ICountryCodeRepository _repo)
并且调用控制器会将其传入,但这不只是创建另一个依赖关系问题,因为所有控制器都必须知道实用程序函数需要什么?
或者是否有可能以某种方式使用 StructureMap 来注入这些实用程序方法?