我正在从事 Web API 项目。我正在调用一个负责数据库交互的存储库。存储库与第三方数据源交互。
我想在存储层中实现依赖注入(inject)(DI)来注入(inject)第三方数据源的依赖,但由于第三方DLL中没有接口(interface),我该如何实现呢?
我使用的是 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);
}
}
最佳答案
这个第 3 方组件与存储库有何关系?它是存储库内部使用的独立服务吗?如果是这样,听起来 3rd 方组件本身是另一个应该抽象的依赖项。
您可以通过创建您自己的界面来实现这一点,该界面反射(reflect)您打算执行的业务操作,以及该服务将实现的业务操作。它可能与服务实现完全匹配,但不需要:
public interface IMovieService
{
int Create(MovieData movie);
List<MovieData> GetAllData();
MovieData GetDataById(int id);
void Update(MovieData movie);
}
然后你可以抽象出这个接口(interface)实现背后的依赖:
public class MovieService : IMovieService
{
private MovieDataSource dataSource = new MovieDataSource();
// methods simply delegate to the dataSource object
}
现在您有了一个可用于依赖项注入(inject)的接口(interface),当您想在不依赖第 3 方组件的情况下测试存储库时,您可以模拟该接口(interface)进行测试。
关于c# - 依赖注入(inject)的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25767889/