Как лучше всего управлять деревом зависимостей в .NET?

В моем последнем проекте мы использовали MSBuild в качестве языка сценариев. (да, действительно!) Мы также написали сотни пользовательских задач MSBuild для частей, которые имели больше смысла в C#. (Я даже написал задачу MSBuild, чтобы сгенерировать шаблонный код для задачи MSBuild. Да, она поглотила себя.)

Хотя я никому не рекомендую использовать тот же подход, одна из вещей, которые я нашел очень полезным, — это встроенное управление зависимостями. Как и следовало ожидать, было легко выразить отношения зависимости и позволить MSBuild позаботиться об их удовлетворении. Например, почти каждый шаг в нашем программном обеспечении требовал, чтобы определенный набор файлов был скопирован в определенное место. Вы могли бы легко написать:

Step1: CopyFiles
Step2: CopyFiles, Step1

и когда вы выполняете Step2, он будет копировать файлы только один раз.

Создание и удовлетворение дерева зависимостей — довольно распространенное явление в программном обеспечении. Я бы хотел, чтобы команда MSBuild взяла свой код управления зависимостями, отделила его от MSBuild и переместила в .NET Framework, где каждый может его использовать. После этого как вы думаете, какой вариант управления зависимостями лучше всего?


person Jay Bazuzi    schedule 11.02.2009    source источник


Ответы (2)


Я думаю, вы могли бы использовать контейнер IOC, такой как Spring, чтобы получить такое поведение.

Создайте экземпляр любой задачи, которая должна выполняться только один раз как синглтон, и пусть конструктор объекта задачи запустит задачу. Затем любой объект, который появится позже с зависимостью от этой задачи, получит ссылку на уже запущенную задачу и сможет получить результаты этой задачи или сделать вывод, что эта задача уже была успешно выполнена.

В весенней конфигурации вы получите множество задач, связанных вместе, каждая из которых ссылается на другие задачи в своей конфигурации конструктора. Этот подход является наиболее гибким, и вы не ограничены «задачами» или чем-то слишком тяжелым в этом отношении.

Я предполагаю, что любая библиотека рабочего процесса также имеет аналогичные концепции. Но я не особо знаком с этими.

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

person user37468    schedule 11.02.2009

Взгляните на проект Refix на CodePlex. Это расшифровывается как REference FIX и работает очень хорошо.

person Daniel Dyson    schedule 25.06.2010