2

Я новичок в автоматическом внедрении зависимостей и пытаюсь полностью реализовать Ninject с помощью приложения MVC4. Все функционально, но OCD во мне интересует, как приложение будет масштабироваться с точки зрения привязки списка в методе RegisterServices (IKernel kernel) в NinjectWebCommon.cs. Например,Инъекционная инъекция инжиниринга: чтение привязок из config?

/// <summary> 
    /// Load your modules or register your services here! 
    /// </summary> 
    /// <param name="kernel">The kernel.</param> 
    private static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind<IAbstractManagerA>().To<ConcreteManagerA>(); 
     kernel.Bind<IAbstractManagerB>().To<ConcreteManagerB>(); 
     kernel.Bind<IAbstractRepoA>().To<ConcreteRepoA>(); 
     ...etc etc could be hundreds 
    }  

Есть ли лучший способ справиться с этим? Может быть, каждый спаривается как параметр web.config или какой-либо другой файл конфигурации? По существу инъекционные зависимости для инъекций в зависимости :)

+0

Считаете ли вы использование соглашения по конфигурации? Ninject и Structuremap обеспечивает функцию сканера для таких конфигураций, как scanner.FromCallingAssembly(); scanner.BindWithDefaultConventions(); по моему личному мнению, смешивая конфигурацию файла xml, и IoC не очень хорошо смешивается, вот почему эта функциональность устарела в структуре map, надеюсь, что это поможет! –

+0

Тогда вам следует рассмотреть Unity of Microsoft: http://msdn.microsoft.com/en-us/library/ff647848.aspx –

+0

@ThanhNguyen: Серьезно, вы не можете просто советовать Unity. Мало того, что Unity может сделать, чего не могут сделать другие структуры (такие как Ninject). – Steven

ответ

5

Рассмотрим проектирование приложений вокруг нескольких четко определенных общих абстракций, таких как:

  • IRepository<TEntity> скрыть операции CRUD базы данных за
  • ICommandHandler<TCommand> определить свои системы деловые операции/прецеденты (example).
  • IQueryHandler<TQuery, TResult> Определить пользовательские запросы, которые могут использоваться бизнес-логикой (example).
  • IValidator<T> как абстракция над классами, которые могут проверять сущности или команды (example).

Применяя этот тип конструкции, как несколько очевидных преимуществ:

  1. Это заставляет вас в чистую и SOLID приложений дизайна.
  2. Это упрощает добавление сквозных проблем вокруг всех реализаций определенной концепции (например, декоратор, который добавляет транзакцию вокруг каждой бизнес-операции).
  3. Это облегчает batch register a whole range родственных типов.
  4. Это значительно упрощает создание поддерживаемых решений поверх этого, например maintenance free WCF services.
+1

Я слежу за вашим блогом и с большим интересом отвечает на вопросы. И этот ответ подводит итог всем лакомствам, включая примеры. Не мог просить больше. Большое спасибо! – Maarten

Смежные вопросы