Я не могу определить, является ли этот подход чистым для реализации DI (внедрение зависимостей в новом проекте webapi) при использовании устаревшего кода. Я новичок в этой концепции и не осваиваю то, что можно и чего нельзя делать. Я использую следующую статью https://www.technical -recipes.com / 2018 / using-зависимая инъекция в web-api-приложения-using-unity /
Устаревший код включаетBusinessLayer и уровень хранилища, определенные в отдельных проектах, которые я буду использовать в своем проекте API. Мой бизнес-объект принимает объект DataBaseController в качестве параметра в своем конструкторе. Моя главная задача - использовать DI с новыми бизнес-объектами, не нарушая существующую логику. Для бизнес-объектов не определены интерфейсы.
Пример унаследованного бизнес-класса
public class BusinessBase : IDisposable
{
public UserLogInfo UserLogInfo { get; set; }
public DataBaseController Dao { get; set; }
public BusinessBase(UserLogInfo user)
{
this.UserLogInfo = user;
}
public BusinessBase(DataBaseController dao, UserLogInfo user)
{
UserLogInfo = user;
Dao = dao;
}
public void Dispose()
{
}
}
public class PreferenceBusiness : BusinessBase
{
public PreferenceBusiness(UserLogInfo user) : base(user)
{
Dao = new DataBaseController();
}
public PreferenceBusiness(DataBaseController dao, UserLogInfo user)
: base(user)
{
Dao = dao;
}
}
Если я определю свои конструкторы приватно, то воспользуюсь методом для возврата экземпляра, подобного этому
public interface ICheckInDocumentsBusiness
{
ICheckInDocumentsBusiness CreateInstance(DataBaseController dao,UserLogInfo user);
}
public class CheckInDocumentsBusiness : BusinessBase, ICheckInDocumentsBusiness
{
private ICheckInDocumentsBusiness _checkIn;
public ICheckInDocumentsBusiness CreateInstance(DataBaseController dao, UserLogInfo user)
{
return _checkIn == null ? new CheckInDocumentsBusiness(dao, user) : _checkIn;
}
private CheckInDocumentsBusiness(UserLogInfo user) : base(user)
{
Dao = new DataBaseController();
}
private CheckInDocumentsBusiness(DataBaseController dao, UserLogInfo user)
: base(dao,user)
{
}
}
Я бы хотелчтобы можно было внедрить мой бизнес-уровень в мой контроллер с параметрами DataBaseController и без параметров UserLogInfo или без них