Контакт с круговыми зависимостями в IOC

Для вышеупомянутого образца XML вы можете попробовать приведенный ниже синтаксический анализатор

public class MainActivity extends Activity {

    ArrayList r_no;
    int count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         r_no = new ArrayList();

         try {
         File file = new File("mnt/sdcard/yourxmlfile.xml");
         InputStream is = new FileInputStream(file.getPath());
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
         Document doc = db.parse(new InputSource(is));
         doc.getDocumentElement().normalize();

         NodeList n = doc.getElementsByTagName("OKV");

         for (int j = 0; j < n.getLength(); j++) {
             Node node = n.item(j);

             Element fstElmnt = (Element) node;

             r_no.add(fstElmnt.getAttribute("r"));

        }
     } catch (Exception e) {
         System.out.println("XML Pasing Excpetion = " + e);
     }
 }
}

Для получения дополнительной информации проверьте официальный документ

9
задан Gerrie Schenck 27 January 2009 в 10:30
поделиться

6 ответов

Круговые зависимости являются знаком плохого дизайна, неважно, при использовании МОК или нет. Я предлагаю, чтобы Вы сделали модернизацию для предотвращения его. Добавление объекта помощника может быть решением.

Например, заставьте MenuStripItems зависеть только от одной части MainForm, который необходим для них и не в целом.

5
ответ дан 4 December 2019 в 13:05
поделиться

Можно использовать метод set для введения некоторых зависимостей после конструкции.

3
ответ дан 4 December 2019 в 13:05
поделиться

Сделайте класс контроллера, который обеспечивает данные и логику который MainForm и MenuStripItem обе потребности избежать циклической ссылки.

3
ответ дан 4 December 2019 в 13:05
поделиться

Я не вижу, как создание класса помощника или контроллера решает круговую проблему зависимости.

Я предоставлю еще некоторую подробную информацию. MenuStripItems зависят от MainForm, потому что они могут установить Содержание MainForm. После вышеупомянутых предложений скажем, я создаю отдельный интерфейс для Содержания MainForm, IFormContent. MenuStripItem может затем зависеть от IFormContent. Но реализация IFormContent будет с другой стороны зависеть от MainForm, приводящего к круговой зависимости.

Возможно, я должен обратиться к инжекции метода set где-нибудь вместо инжекции конструктора?

1
ответ дан 4 December 2019 в 13:05
поделиться

Как создаются MenuStrip и MenuStripItems?

Когда я использую IOC, всегда существует отношение 1 к 1 между службой и зависимостями, которые предоставляет контейнер IOC обслуживание. Если службе требуется более одного объекта, она будет иметь отношение 1 к 1 с одним объектом фабрики, который создает несколько элементов. Этот фабричный метод может быть параметризован, чтобы позволить созданным элементам обращаться к их контейнеру.

0
ответ дан 4 December 2019 в 13:05
поделиться

Я согласен с kgiannakakis:

Циклические зависимости - признак плохого дизайна, независимо от того, используете ли вы IoC или нет. Я предлагаю вам сделать перепроектирование, чтобы избежать этого. Добавление вспомогательного может быть решением.

Чтобы выяснить, какие методы должны быть извлечены в класс-помощник, может помочь следующий процесс:

Предположим, у вас есть класс A и класс B, которые ссылаются друг на друга и создают круговую зависимость. Чтобы выяснить, какие методы следует извлечь во внешний вспомогательный объект, перечислите все методы класса A, используемые классом A, и все методы класса B, используемые классом A. Более короткий из этих двух списков и есть ваш скрытый вспомогательный класс C.

Вдохновлено Miško Hevery http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/

3
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: