2013-04-26 3 views
0

Я просмотрел несколько потоков здесь (возможно, я использую неправильную терминологию), но я конвертирую веб-приложение для использования IoC через NInject. Мои проекты IoC были достаточно малы, так что не было большой проблемой, но то, что рекомендуемая практика для следующей ситуации ...Преобразование в IoC, как обращаться с внутренними объектами

структура моего объекта выглядит следующим образом ...

public class Address 
{ 
    public virtual string Street { get; set; } 
    public virtual City City { get; set; } 
} 

Город быть его собственный объект ...

public class City 
{ 
    public virtual string Name { get; set; } 
} 

Теперь я обработка неизбежного «объекта является пустым» исключением следующим образом ...

public void DoThing() 
{ 
    new Address address(); 
    address.Street = _street; 
    address.City = new City(); 
    address.City.Name = _cityName; 
    DoOtherThing(address); 
} 

Это было прекрасно для небольших проектов ... но теперь, когда мы говорим что-то большее, это становится настоящей работой. (Добавить еще один объект моего объекта, это может означать, что мне нужно сделать это в более чем 100 мест, предполагая, что я нахожу их все)

До IoC это было легко манипулировать, делая такие вещи, как это ...

public class Address 
{ 
    private string street; 
    private City city; 

    public Address() 
    { 
     street = string.Empty; 
     City = new City(); 
    } 

    public string Street 
    { 
     get { return street; } 
     set { street = value; } 
    } 
} 

Что я пытаюсь выяснить (и, возможно, я просто полностью не читаю эту деталь в руководствах, которые я читал), как я могу сделать эквивалент в IoC в элегантной манере?

Структура Я следую базируется один представленный Тони Sneed на http://www.develop.com/onionarchitecture

Единственным заметным отличием, что я не имею ничего на мои услуги уровня еще потому, что большинство наших вещей просто чтение из/запись в базу данных с очень небольшим количеством заметных манипуляций между ними. (У меня, вероятно, будут вещи, которые мне нужно будет установить на уровне обслуживания, но пока еще не ударил, но все еще не совсем ясно, что именно на этом уровне стихирует репозиторий.)

Дайте мне знать, если есть больше деталей, которые я могу предоставить, чтобы быть полезными (IoC работает нормально, мне просто нужно решить вышеупомянутую проблему, чтобы поддерживать ремонтопригодность)

ответ

2

Если все, что вы делаете, создает пустой объект, тогда нет реального причина использования IoC (лучший термин - инъекция зависимостей, потому что это более специфично). Если вы не собираетесь передавать объект City City в объект Address, просто используйте новое в своем конструкторе. В этой ситуации нет пользы от использования IoC/DI.

Вы должны использовать DI, когда вам нужно передать зависимость от объекта во время выполнения. Хотя это технически зависимость, тот факт, что это простой пустой объект, не делает его хорошим кандидатом.

+0

Просто пытаясь прояснить, что вы говорите, когда я действительно готов к использованию объекта, такого как мой метод «DoThing» выше, продолжайте использовать его таким образом? Или вы имеете в виду использование класса объектов так, как я всегда имел до DI. (Я на самом деле не использую DI с объектом, я просто ссылаюсь на них. Мои репозитории - это то, что вводится.) – RualStorge

+0

@RualStorge - я говорю, что нет ничего плохого в том, как вы всегда это делали. –

+0

Спасибо, я верну его. Я думаю, что я закончил это, следуя примерам, которые я видел. Я думал, что мне не хватает части головоломки. Еще раз спасибо. – RualStorge