Вот что я понимаю о внедрении зависимости и инверсии управления:
"Внедрение зависимостей, проще говоря, является реализацией шаблона IOC. Вместо тесной связи зависимости одного объекта с другим с помощью ключевого слова 'new', передайте его как внешнюю зависимость, используяКонструктор / свойство / метод внедрения ".
Подробнее см. здесь - https://martinfowler.com/articles/injection.html
Что касается вашего вопроса, вы реализовали шаблон, используя внедрение конструктора в свой код
Интерфейс :
public interface IDashboardRepository
{
public object sumAndAVG(string regionalManager, string dtFrom, string dtTo);
}
Реализация:
public class DashboardRepo:IDashboardRepository
{
//Simplified for understanding
}
Использование IDashboardRepository в другом объекте:
public class DashboradHandeler
{
public IDashboardRepository _idashboard;
public DashboradHandeler(IDashboardRepository _idashboard)
{
this._idashboard = _idashboard;
}
}
Использование DashboradHandeler в другом объекте (вашем контроллере):
DashboradHandeler dashboard = new DashboradHandeler(new DashboardRepo());
dashboard._idashboard.sumAndAVG(regionalManager,dtFrom,dtTo);
Наблюдения :
Внедрение IDashboardRepository в DashboradHandeler слабо связано.Он переворачивает ответственность за создание объекта IDashboardRepository класса от DashboradHandeler на вызывающую сторону.В вашем случае это DashboradHandeler .
Однако экземпляр класса DashboradHandeler можно изменить.Вместо того, чтобы делать: DashboradHandeler dashboard = new DashboradHandeler(new DashboardRepo());
, вы можете инвертировать создание объекта во внешний контейнер, такой как Autofac, Ninject.Старайтесь не использовать ключевое слово 'new' везде, где это применимо.
Соглашения об именах могут быть улучшены.Нотация '_' используется главным образом с частными свойствами.Используйте один из них, а не оба:
Ваш код :
public class DashboradHandeler
{
public IDashboardRepository _idashboard;
public DashboradHandeler(IDashboardRepository _idashboard)
{
this._idashboard = _idashboard;
}
}
С нотацией '_' :
public class DashboradHandeler
{
private IDashboardRepository _idashboard;
public DashboradHandeler(IDashboardRepository idashboard)
{
_idashboard = idashboard;
}
}
Без обозначения '_' :
public class DashboradHandeler
{
private IDashboardRepository idashboard;
public DashboradHandeler(IDashboardRepository idashboard)
{
this.idashboard = idashboard;
}
}
Это несколько моментов, о которых я могу подумать прямо сейчас.