2012-06-21 2 views
5

Я работаю с приложением WPF в C#. У меня есть ряд констант, определенных в статическом классе, как:Как получить доступ к статическому классу в том же пространстве имен, но другой сборке?

Project1:

namespace MyCompany 
{ 
    public static class Constants 
    { 
     public static int MY_CONSTANT = 123456; 
    } 
} 

Тогда все, что мне нужно сделать, чтобы получить доступ к моей постоянной в любом месте внутри проекта 1 является:

int x = Constants.MY_CONSTANT; 

Теперь я добавляю еще один проект, к тому же решению, и использовать тот же корневое пространство имен:

проект 2

namespace MyCompany.MyControl 
{ 
    class VideoControl 
    { 
     int x; 
     x = Constants.MY_CONSTANT; //<-- doesn't work 
     x = MyCompany.Constants.MY_CONSTANT; //<-- doesn't work either 
    } 
} 

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

Является ли то, что я пытаюсь сделать, даже возможно? В настоящее время мое обходное решение передает все необходимые константы в конструкторе, но я бы хотел просто получить к ним доступ напрямую.

+4

Вам нужна ссылка - вам нужно будет решить свою круговую зависимость - возможно, переместите класс констант на 3-ю сборку, которую могут ссылаться обе другие сборки. – Blorgbeard

+0

рядом с точкой: если вы хотите константу, почему бы вам не объявить ее константой 'public const int MY_CONSTANT = 123456;'? – Hinek

ответ

2

Вы можете переместить все статические константы из проекта 1 в проект 2, поэтому все константы видны как для проекта 1, так и для проекта 2; Я рекомендовал ввести другой проект (возможно, общий), который мог бы помочь управлять всеми материалами, которые были доступны для всех других проектов. это общий инфраструктурный проект.

+0

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

0

Вы должны добавить ссылку в проект 1 в проект 2, тогда она должна работать нормально. Вам нужна графика, чтобы проиллюстрировать, как это сделать?

Вот ссылка MSDN http://msdn.microsoft.com/en-us/library/wkze6zky.aspx

А вот ТАК ответить с картинками>Adding projects to a project in Visual Studio 2010

+0

Проект 1 - проект WPF, который использует элемент управления WPF внутри Project 2, поэтому я уверен, что он уже ссылается на него. К сожалению, мой код работает, поэтому я не буду проверять до завтра. Тогда вернусь к тебе. – Eternal21

+0

Ну, это странно, чтобы попросить нас помочь вам разобраться, когда вы не можете это проверить ;-) – jcolebrand

+0

Я работал из-за памяти, так как проблема прослушивала меня дома. Просто проверено и да Проект 1 имеет ссылку на проект 2. – Eternal21

0

Другой ответ близок, но это на самом деле наоборот: Project 2 необходима ссылка проекта 1. Код должен затем скомпилируйте.

EDIT:

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

+0

Для меня разница между «Проектом 1» и «Проектом 2» является просто направленностью.Если бы он дал имена, такие как «AutoManufacturers» и «CarDealerships», я мог бы быть более явным. Пожалуйста, не путайте общие ненаправленные имена, чтобы подразумевать намерение, но ищите намерение, присущее этому примеру, например связанный вопрос, который показал ссылку на один проект из другого. – jcolebrand

+0

Извините, это первый вопрос, который я задал в StackOverflow, и я старался сохранить код как можно более общий, чтобы упростить синтаксический анализ. Похоже, в конце концов я слишком сильно его обрезал. – Eternal21

+0

Не стесняйтесь быть в высшей степени ясными в будущем, не нарушая NDA. – jcolebrand