Я только что начал программирование в .NET, и у меня возникли проблемы с реализацией dependency injection (using Ninject)
.Интенсивность зависимостей .NET MVC с Ninject
Я создаю какое-то приложение для общественного питания, где пользователь может просматривать города, в городах, где просматривают рестораны и в ресторанах просматривают еду.
Я использую UnitOfWork и репозиторий шаблон, где, например, получить доступ к городу по идентификатору, как это:
_unitOfWork.TownRepository.GetByID(id);
Сейчас я приступил к реализации услуг в приложение, и я столкнулся с необходимостью dependency injection
.
Я создал ITownService
, IRestaurantService
и IFoodService
(так как я TownRepository
, RestaurantRepository
и FoodRepository
в моем UnitOfWork
).
Sample вид TownService:
public class TownService : ITownService
{
// initialize UnitOfWork
private IUnitOfWork _unitOfWork;
public TownService()
: this(new UnitOfWork())
{
}
public TownService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public Town GetByID(object id)
{
return _unitOfWork.TownRepository.GetByID(id);
}
public IEnumerable<Town> GetAll()
{
return _unitOfWork.TownRepository.Get();
}
public bool Insert(Town town)
{
// validation logic
if (!ValidateTown(town))
return false;
try
{
_unitOfWork.TownRepository.Insert(town);
_unitOfWork.Save();
}
catch
{
return false;
}
return true;
}
public bool Delete(object id)
{
try
{
_unitOfWork.TownRepository.Delete(id);
_unitOfWork.Save();
}
catch
{
return false;
}
return true;
}
public bool Update(Town townToUpdate)
{
// validation logic
if (!ValidateTown(townToUpdate))
return false;
try
{
_unitOfWork.TownRepository.Update(townToUpdate);
_unitOfWork.Save();
}
catch
{
return false;
}
return true;
}
}
Я не выполнил FoodService
и RestaurantService
пока нет, но они должны быть похожи с конечно некоторые additinal методы exepct это, что у меня есть. Например, в RestaurantService
у меня может быть public Restaurant GetRestaurantsInTown(Town town){}
или что-то в этом роде.
Надеюсь, что у вас есть ощущение приложения. Теперь вернемся к Ninject
.
В моей TownController
я бы что-то вроде этого:
public class TownController : Controller
{
private ITownService _townService;
public TownController(ITownService townService)
{
_townService = townService;
}
}
Похожие бы для RestaurantController
и FoodController
конечно просто конструктор инъекционного.
Как использовать Ninject
в таком примере? Нужен ли мне какой-то глобальный IService
, а не ITownService
, IRestaurantService
и IFoodService
, которые я бы унаследовал в TownService
, RestaurantService
и FoodService
, или это нормально?
При привязке, что мне нужно для привязки?
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
kernel.Bind<ITownService>().To<TownService>();
kernel.Bind<IRestaurantService>().To<RestaurantService>();
kernel.Bind<IFoodService>().To<TownService>();
Что-то вроде этого?
Вкратце - что мне нужно для добавления инъекции зависимостей с Ninject
?
У меня действительно есть проблемы с этим и вам нужна помощь.
Большое спасибо вперёд.
Привет, В настоящее время Как вы определили свой конструктор в контроллере? в приведенном выше примере вы передаете только «ITownService», что насчет 'IRestaurantService' и' IFoodService'? как вы создаете переменную? –