依赖项注入的实现
本文关键字:实现 注入 依赖 | 更新日期: 2023-09-27 18:21:32
我正在做一个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);
}
}
这个第三方组件与存储库的关系如何?它是存储库内部使用的独立服务吗?如果是这样的话,听起来第三方组件本身就是另一个应该抽象的依赖项。
您可以通过创建自己的接口来实现这一点,该接口反映了您打算执行的业务操作,以及此服务将实现的业务操作。它可能与服务实现完全匹配,但不需要:
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
}
现在,您有了一个可以用于依赖项注入的接口,当您想在不依赖第三方组件的情况下测试存储库时,可以模拟该接口进行测试。