Минималистичный пример реализации с использованием Ninject . Это не абсолютная правда о DI / IoC, просто краткий пример того, как это можно сделать .
Конфигурация
// repositories
base.Bind<IMyRepository>().To<MyRepository>();
// services
base.Bind<IMyServices>().To<MyServices>();
Когда используется IMyRepository
, он будет использовать конкретную реализацию MyRepository
.
Контроллер
public class MyController : Controller
{
private readonly IMyServices _myServices;
public AnimalController(IMyServices myServices)
{
_myServices = myServices;
}
// your actions
}
Опять же, внутри MyService
есть аналогичный шаблон (инжектор конструктора)
Услуги
public class MyServices : IMyServices
{
private readonly IMyRepository _myRepository;
public MyServices(IMyRepository myRepository)
{
_myRepository = myRepository;
}
public void Example()
{
_myRepository.PleaseDoSomething();
}
}
Также помните, что в ASP.NET MVC есть много других вещей, где может использоваться IoC:
- локализация
- разрешение
- поставщик метаданных модели (например, локализованные сообщения об ошибках)
- пользовательские модели переплетов
- контроллер фабричный
- и т.д.
Обновление
В примере кода произошла ошибка. Внедрение зависимостей не было сделано в сервисе. Теперь это должно быть правильно.
Обновление 2
Я думаю, что настоятельно рекомендуется использовать пакеты NuGet для начальной загрузки вашего приложения. Экономит время, может применить некоторые «лучшие практики», другие проекты получат аналогичную базу и т. Д. Вот несколько инструкций для разных IoC + MVC 3