Как я могу написать (Application.Current as App) в моей библиотеке классов Silverlight? - PullRequest
1 голос
/ 12 мая 2011

У меня мало открытых свойств в App.xaml.cs, который находится в проекте A, и я хочу сослаться на них в моем проекте B. Однако мой проект A имеет ссылку на проект B, поэтому я не могу снова добавить ссылку на проект A в проекте B, иначе это приведет к циклической ошибке. Итак, как я могу ссылаться на эти свойства в моей библиотеке классов? Я не хочу использовать отражение:).

В качестве обходного пути я сохранил эти свойства в одном классе в проекте B (чтобы его можно было ссылаться в проекте A, а также в проекте B) и сделал эти свойства статичными, и все работает нормально. Однако мне все еще интересно знать, что, если бы я хранил их в App.xaml.cs? Есть варианты?

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Класс App должен отображать вещи, которые только относятся к проекту приложения. Как только вы поняли, что хотите, чтобы эти вещи были доступны в B.dll, они стали важны не только для проекта приложения и, следовательно, больше не принадлежат проекту приложения.

Разумным подходом может быть добавление класса в B.dll, который несет эти вещи в качестве статических свойств. Другим распространенным шаблоном является наличие Current статического свойства.

public MyClass
{
    private static MyClass _current = new MyClass();
    public static MyClass Current { get { return _current; } }

    public string SomeInstanceValue { get; set; }
}

И A, и B получат доступ к вещам, используя шаблон var x = MyClass.Current.SomeInstanceValue. Преимущество этого подхода заключается в том, что он позволяет получателю свойства Current определять, доступен ли «текущий» экземпляр или нет.

Вы также можете просмотреть документацию по ApplicationLifeTimeObjects .

1 голос
/ 12 мая 2011

Когда A и B нужно что-то, возможно, вам следует поместить их в проект C (C как в Common), а затем ссылаться на C как из A, так и из B.

...