Я только что начал программирование в .NET, и у меня возникли проблемы с реализацией dependency injection (using Ninject)
.
Я создаю какое-то приложение для общественного питания, где пользователь может просматривать города, в городах, где просматривают рестораны и в ресторанах просматривают еду.
Я использую шаблон UnitOfWork и репозитория, где, например, я обращаюсь к городу по id следующим образом:
_unitOfWork.TownRepository.GetByID(id);
Теперь я начал внедрять службы в приложение, и я столкнулся с необходимостью для dependency injection
.
Я создал ITownService
, IRestaurantService
и IFoodService
(так как я TownRepository
, RestaurantRepository
и FoodRepository
в моем UnitOfWork
).
Пример оформления 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
, но они должны быть похожими, конечно, с некоторыми дополнительными методами 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
?
У меня действительно проблемы с этим, и мне нужна помощь.
Большое спасибо вперёд.