Как создать класс, который может использовать одно из двух пространств имен?

У меня есть проект, который содержит класс, рисующий график. Класс выглядит так:-

using System.Web.UI.DataVisualization.Charting;

namespace MyNameSpace
{
    public static class Utilities
    {
        public static void DrawOnGraph (Chart ourChart,
                                        //...more parameters...
                                        )
        {
            ChartArea our_area = new ChartArea("Main");
            // Draw things
        }
    }
}

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

using System.Windows.Forms.DataVisualization.Charting;

namespace MyNameSpace
{
    public static class Utilities
    {
        public static void DrawOnGraph (Chart ourChart,
                                        //...more parameters...
                                        )
        {
            ChartArea our_area = new ChartArea("Main");
            // Draw things
        }
    }
}

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

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

Лучшее, что мне удалось сделать, это предоставить обе директивы using, но закомментировать одну из них в соответствии с решением, над которым я сейчас работаю. Но это не кажется мне очень удовлетворительным. Есть ли способ лучше? Или мне не стоит так бездельничать и писать код дважды?

0
задан Brian Hooper 26 July 2012 в 09:59
поделиться