Каков наилучший способ управления деревом зависимостей в .NET? - PullRequest
13 голосов
/ 11 февраля 2009

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

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

Step1: CopyFiles
Step2: CopyFiles, Step1

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

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

Ответы [ 2 ]

5 голосов
/ 11 февраля 2009

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

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

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

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

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

1 голос
/ 25 июня 2010

Посмотрите на проект Refix на CodePlex. Он обозначает REference FIX и работает очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...