我正在开发一个Web API项目。我正在调用一个负责数据库交互的存储库。存储库与第三方数据源交互。
我想将依赖注入(DI)实现到存储库层以注入第三方数据源的依赖关系,但是如何实现这一点,因为该第三方DLL中没有接口?
我使用Unity框架。
第三方DLL只包含一个类:
using System;
using System.Collections.Generic;
namespace MoviesLibrary
{
public class MovieDataSource
{
public MovieDataSource();
public int Create(MovieData movie);
public List<MovieData> GetAllData();
public MovieData GetDataById(int id);
public void Update(MovieData movie);
}
}
答案 0 :(得分:6)
此第三方组件与存储库有何关联?它是存储库内部使用的独立服务吗?如果是这样,听起来第三方组件本身就是另一个应该被抽象的依赖。
您可以通过创建自己的接口来实现此目的,该接口反映您要执行的业务操作以及此服务将实现的操作。 可能完全匹配服务实现,但不需要:
public interface IMovieService
{
int Create(MovieData movie);
List<MovieData> GetAllData();
MovieData GetDataById(int id);
void Update(MovieData movie);
}
然后,您可以抽象此接口实现背后的依赖项:
public class MovieService : IMovieService
{
private MovieDataSource dataSource = new MovieDataSource();
// methods simply delegate to the dataSource object
}
现在您有了一个可用于依赖注入的接口,当您想要在不依赖第三方组件的情况下测试存储库时,可以模拟测试。