Как использовать дочерний класс при применении внедрения зависимостей

#c# #.net-core #dependency-injection

#c# #.net-core #внедрение зависимостей

Вопрос:

вот интерфейс

 public interface IBaseWorker
{
    Task<WorkResult> IntializeWork();
    Task<WorkResult> DoWork();
    Task<WorkResult> SendEmail();
}
  

Вот мой базовый класс.

 public abstract class BaseWorker : IBaseWorker
{
    private readonly ILogger _logger;
    protected readonly IDatabaseCommonService _databaseCommonService;
    protected List<ClientConfigurations> clientConfigurations;  

    public BaseWorker(ILogger logger, IDatabaseCommonService databaseCommonService)
    {
        _databaseCommonService = databaseCommonService;
        _logger = logger;
    }

    public virtual async Task<WorkResult> IntializeWork()
    {
        Do something... 
    }

    public abstract Task<WorkResult> DoWork();

    public abstract Task<WorkResult> SendEmail();
}
  

вот мой дочерний класс.

  public class ChildWorker : BaseWorker 
{
    public ChildWorker(
        ILogger<ChildWorker> logger, 
        IDatabaseCommonService databaseCommonService) : base(logger, databaseCommonService)
    {

    }

    public override Task<WorkResult> DoWork()
    {
        throw new NotImplementedException();
    }

    public override Task<WorkResult> SendEmail()
    {
        throw new NotImplementedException();
    }
}
  

теперь я хочу использовать этот дочерний класс в другом классе. пожалуйста, подскажите мне лучший способ сделать это. Я не создавал интерфейс для этого дочернего класса. Я хочу использовать внедрение зависимостей. можно ли это использовать без интерфейса.

 public class MyClass : IMyClass 
{
   private readonly ChildWorker _childWorker;
  
   public MyClass(ChildWorker childWorker){
      _childWorker = childWorker
   }  

   public void method(){
      _childWorker.IntializeWork();
   } 
}
  

если это не нормально, может кто-нибудь, пожалуйста, подскажите мне, как это сделать.

Ответ №1:

Да, поддерживается простое внедрение конкретного класса. Если ваш класс не вызывает проблем для целей тестирования, или вызывающий объект просто не нуждается в тестировании по какой-либо причине, ничто не мешает вам сделать это.