Приложение .Net Refactoring для использования Dependency Injection - PullRequest
0 голосов
/ 16 декабря 2009

В настоящее время я нахожусь на стадии тестирования проекта, над которым я работаю, и испытываю трудности с тестированием основного сервиса во всех случаях, кроме самых простых тестовых случаев по умолчанию.

Служба в настоящее время отвечает за создание всех подкомпонентов, которые я хотел бы изменить для использования контейнера IoC.

Какой контейнер следует использовать для быстрого рефакторинга в простой настройке IoC, все, что мне нужно, это вставить компоненты, перечисленные в следующем конструкторе:

  public DataService(string applicationFolder, string pluginFolder, 
         string persistantCacheDirectory, string settingsFolder, 
         string colorsFolder, string templatesFolder) 
 {

  _DataSourceLoaderPlugins = new DataSourceLoaderPlugins(pluginFolder, 
                                     applicationFolder, defaultConnectionString);
  _DataSourcesService = new DataSourceService(_DataSourceLoaderPlugins);

  _ChartPlugins = new ChartPlugins(pluginFolder);
  //... and about 10 more dependencies

}

Я новичок в контейнерах IoC, и я не совсем уверен, что является лучшей средой для моих основных потребностей.

Конструкторам компонентов нужны некоторые параметры из настроек приложения в web.config, которые будут такими же сложными, как и для этого проекта.

Эта служба также должна иметь одноэлементную область.

Какие предложения есть у людей? какой фреймворк прост, его легко установить и запустить?

Ответы [ 5 ]

2 голосов
/ 16 декабря 2009

Castle Windsor очень быстро и легко установить, вот отличное руководство с некоторыми примерами .

1 голос
/ 17 декабря 2009

Autofac будет отличным выбором - он легкий и очень прост в настройке и запуске.

Вы бы зарегистрировали свою структуру так:

var builder = new ContainerBuilder();

// Use the most resolvable constructor
builder.Register<DataSourceLoaderPlugins>().As<IDataSourceLoaderPlugins>().SingletonScoped();

// Use your own instance
builder.Register(new DataSourcesService("some path")).As<IDataSourcesService>().SingletonScoped();

// Reference another component
builder.Register(c => new ChartPlugins(c.Resolve<IDataSourcesService>(), "another path")).As<IChartPlugins>().SingletonScoped();

// ...other ~10 dependencies...

builder.Register<DataService>().SingletonScoped();

// How to resolve an instance

var container = builder.Build();

DataService dataService = container.Resolve<DataService>();

(есть поддержка конфигурации XML, если хотите)

1 голос
/ 16 декабря 2009

Здесь приведено сравнение библиотек IoC:

http://elegantcode.com/2009/01/07/ioc-libraries-compared/

Я бы посмотрел на фреймворки, которые позволяют вам конфигурировать ваше приложение, используя как конфигурационный файл, так и программно - чтобы помочь модульному тестированию.

1 голос
/ 16 декабря 2009

Я большой поклонник StructureMap - я не нашел, что потребовалось огромное количество усилий, чтобы освоить его, и сообщество очень активно, с создателем Джереми Миллер быть особенно полезным StructureMap, безусловно, может делать то, что вам нужно, и все это возможно в рамках «стандартных» шаблонов использования - базовые учебники должны показать, что вы можете делать все, что хотите.

Сайт StructureMap - отличное место для начала, с множеством обучающих программ и примеров кода.

Тем не менее, я представляю, что большинство контейнеров IoC основного потока будут соответствовать вашим потребностям, это действительно сводится к личным предпочтениям, например:

  1. Что используют люди, которых вы знаете? (Для меня Ninject, StructureMap и Unity)
  2. Какими проектами с открытым исходным кодом вы восхищаетесь и чем они пользуются? (Мне кажется, что Alt.Net одобряет StructureMap)
  3. Вы строгий магазин Microsoft? (Тогда Unity - это путь - я собираюсь использовать его чаще, поскольку некоторые из моих клиентов принадлежат только Microsoft) *

Если вы хотите, чтобы обзор того, что там было, помогло вам определиться, есть отличное сообщение в блоге здесь , в котором рассматриваются все основные параметры.

0 голосов
/ 16 декабря 2009

Фреймворк Unity от Microsoft хорош! Не сложно использовать!

...