Цель заключается в использовании IoC и возможности [макетировать зависимости] для модульного тестирования.
Проект: .NET Core Web API с несколькими библиотеками классов
Я использую Microsoft.Extensions.DependencyInjection для моего IoC, и я хотел бы продолжать использовать его, если он поддерживает то, что я пытаюсь выполнить.
Проблема: по крайней мере один класс в моих сборках (библиотеках классов) имеет зависимость, котораянужно издеваться (например, с помощью Moq).Я полностью понимаю, что могу использовать инжектор конструктора для внедрения интерфейса, но это не соответствует сценарию.
То, что я просто пытаюсь выполнить в своей сборке, это разрешить зависимость с помощью контейнера, который я инициировал в своем классе запуска Web-API.
Как бы я это сделал?И если это невозможно, что может быть другим способом сделать то же самое, то есть издеваться над моим принтером, не используя инъекцию зависимостей?
Ниже приведен пример кода, который, надеюсь, немного прояснит это.
Startup.cs веб-API (содержит ссылку на сборку, которая определяет принтер)
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IPrinter, Printer>();
}
В другой сборке я хотел бы разрешить экземпляр Printer, используя тот же контейнер.
public interface IPrinter
{
void Print(string text);
}
public class Printer : IPrinter
{
public void Print(string text)
{
Console.WriteLine("Printing: " + text);
}
}
public class Task
{
public void PrintSomething(string text)
{
//do not 'new up' but resolve it from the container of Startup.cs
var printer = new Printer();
printer.Print(text);
}
}