依赖项注入的实现

本文关键字:实现 注入 依赖 | 更新日期: 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
}

现在,您有了一个可以用于依赖项注入的接口,当您想在不依赖第三方组件的情况下测试存储库时,可以模拟该接口进行测试。