执行依赖注入

时间:2014-09-10 14:20:47

标签: c# dependency-injection repository unity-container asp.net-web-api

我正在开发一个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);
    }
}

1 个答案:

答案 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
}

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