#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:
Да, поддерживается простое внедрение конкретного класса. Если ваш класс не вызывает проблем для целей тестирования, или вызывающий объект просто не нуждается в тестировании по какой-либо причине, ничто не мешает вам сделать это.