.NET 콘솔 애플리케이션에서 종속성 주입 구성
9394 단어 dotnetprogrammingcsharptutorial
그러나 새 콘솔 응용 프로그램을 시작할 때 기본적으로 종속성 주입을 사용할 수 없으므로 추가해 봅시다!
설정 🧰
설정은 매우 간단하며 .NET 콘솔 애플리케이션만 생성하면 됩니다.
~$ dotnet new console -o DepencyInjectionInConsoleApp
간단한 콘솔 애플리케이션 📦
이 예에서는 맞춤법 검사기가 있는 텍스트 편집기로 작업합니다.
맞춤법 검사기를 만들어 보겠습니다.
// ISpellChecker.cs
namespace DependencyInjectionInConsoleApp;
public interface ISpellChecker
{
bool IsValid(string text);
}
public class VeryBadSpellChecker : ISpellChecker
{
public bool IsValid(string text)
=> true;
}
이제 텍스트 편집기를 만들 수 있습니다.
// TextEditor.cs
namespace DependencyInjectionInConsoleApp;
public class TextEditor
{
private readonly ISpellChecker _spellChecker;
public TextEditor(ISpellChecker spellChecker)
=> _spellChecker = spellChecker;
public void Edit(string text)
{
if (!_spellChecker.IsValid(text))
{
throw new InvalidOperationException("Text is not valid");
}
// Process the text
Console.WriteLine("Text processed");
}
}
마지막으로 편집기를 만들고 호출해 보겠습니다.
// Program.cs
using DependencyInjectionInConsoleApp;
var spellChecker = new VeryBadSpellChecker();
var textEditor = new TextEditor(spellChecker);
textEditor.Edit("Hello, world!");
선택적으로 프로그램을 실행하여 설정을 테스트할 수 있습니다.
~/DepencyInjectionInConsoleApp$ dotnet run
Text processed
모두 준비되었습니다!
문제
이 예에서는 몇 개의 클래스와
TextEditor
에 대한 ISpellChecker
의 단일 종속성만 있지만 실제 프로젝트에서는 각각 수십 개가 있을 수 있습니다.이 경우
Program.cs
파일에 객체를 생성하는 것은 다음과 같이 객체 생성에만 전적으로 사용되는 많은 코드 행으로 이어지기 때문에 좋은 해결책이 아닙니다.var logger = new SpecificLogger();
var databaseContext = new DatabaseContext(logger);
var spellChecker = new FrenchSpellChecker(logger);
var currentUserService = new CurrentUserService(logger, databaseContext)
var textEditor = new TextEditor(currentUserService, spellChecker);
// and so on
또한 개체의 종속성을 변경하는 경우 전체 초기화 프로세스를 거쳐야 할 수도 있습니다. 설상가상으로 동일한 인터페이스의 다른 구현을 다루는 경우 주의해야 합니다.
var spellChecker1 = new FrenchSpellChecker();
var spellChecker2 = new EnglishSpellChecker();
// ...
var englandAmbassyTextEditor = new TextEditor(spellChecker1);
// ^ We probably not meant it to be the french one !
여기에서 종속성을 혼합하는 것은 다른 많은 코드 줄 아래에 묻히기 때문에 어려운 일입니다.
이것이 종속성 주입으로 해결할 수 있는 몇 가지 문제입니다. 그렇게 하는 것이 좋습니다!
의존성 주입 가져오기 💉
콘솔 애플리케이션에서 종속성 주입을 도입하는 문제에 처음 직면했을 때 가혹한 프로세스가 될 것이라고 예상했지만 놀랍게도 실제로는 그렇지 않습니다.
먼저 Microsoft의 종속성 주입 확장 패키지를 추가해야 합니다.
~DepencyInjectionInConsoleApp$ dotnet add package Microsoft.Extensions.DependencyInjection
이제 종속성 주입 컨테이너를 구성할 수 있습니다.
using Microsoft.Extensions.DependencyInjection;
var serviceProvider = new ServiceCollection()
.AddTransient<ISpellChecker, VeryBadSpellChecker>()
.AddTransient<TextEditor>()
.BuildServiceProvider();
마지막으로 수동 초기화를 제거하고 종속성 주입 컨테이너에서
TextEditor
를 검색합니다.- var spellChecker = new VeryBadSpellChecker();
- var textEditor = new TextEditor(spellChecker);
+ var textEditor = serviceProvider.GetRequiredService<TextEditor>();
textEditor.Edit("Hello, world!");
이제 프로그램을 다시 한 번 실행하여 아무것도 변경되지 않았는지 확인할 수 있습니다.
~/DepencyInjectionInConsoleApp$ dotnet run
Text processed
그리고 끝났습니다!
테이크 아웃
간단한 콘솔 응용 프로그램에서 시작하여 프로젝트에 종속성 주입 기능을 성공적으로 도입하여 개체를 호출할 때 더 간단하고 종속성을 업데이트하기가 더 쉬워졌습니다.
이 예에서는 Microsoft에서 제공하는 컨테이너를 사용했지만 다른 여러 컨테이너도 존재합니다chose them according to your needs and feel !
Reference
이 문제에 관하여(.NET 콘솔 애플리케이션에서 종속성 주입 구성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pbouillon/configuring-dependency-injection-in-your-net-console-application-aji텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)