Внедрить службу из библиотеки классов в другую библиотеку классов - PullRequest
1 голос
/ 22 февраля 2020

У меня есть две библиотеки классов и консольное приложение,

в моем консольном приложении:

class Program
{
    static void Main(string[] args)
    {
        IConfiguration config = new ConfigurationBuilder()
        .SetBasePath(Path.Combine(Directory.GetCurrentDirectory()))
        .AddJsonFile("appsettings.json", false, true)
        .Build();

        var services = new ServiceCollection()
            .AddSingleton(provider => (IConfigurationRoot)config)
            .AddDbContext<Context>(options => options.UseNpgsql(config.GetConnectionString("DefaultConnection")))
            .AddScoped<IQueryService, QueryService>()
            .BuildServiceProvider();

        var a = new MockReader.MockDataServer();
        a.ReadData();
    }
}

Одна из библиотек классов - это проект базы данных classi c, читающий / запись в базу данных, и эта библиотека определяет и реализует сервис IDataService. Он определяет fx метод

public List<int> getAll()

Библиотека второго класса должна создаваться консольным приложением и должна иметь доступ к методам IDataService

public class MockDataServer
{

    private IQueryService _queryService;
    public MockDataServer (IQueryService queryService) 
    {
        _queryService = queryService;
    }

Но я не знаю, как дать ему доступ / решить правильно?

1 Ответ

1 голос
/ 22 февраля 2020

Также добавьте сервер в набор служб, чтобы встроенный поставщик знал, как разрешить его зависимости.

//...

var services = new ServiceCollection()
    .AddSingleton(provider => (IConfigurationRoot)config)
    .AddDbContext<Context>(options => 
        options.UseNpgsql(config.GetConnectionString("DefaultConnection"))
    )
    .AddScoped<IQueryService, QueryService>()
    .AddScoped<MockDataServer>() //<-- Add server
    .BuildServiceProvider();

MockDataServer server = services.GetService<MockDataServer>();
server.ReadData();

Консоль в этом случае действует как композиция root и должна be имеют все типы, задействованные для выполнения своей заданной функции.

...