Comment puis-je écrire (application.current en tant qu'application) dans ma bibliothèque de classe Silverlight?

StackOverflow https://stackoverflow.com/questions/5982062

Question

J'ai peu de propriétés publiques dans app.xaml.cs qui est dans le projet A et je veux les référer dans mon projet B. Cependant, mon projet A a une référence au projet B, donc je ne peux pas ajouter à nouveau la référence du projet A en projet B sinon cela entraînera une erreur cyclique. Alors, comment puis-je référer ces propriétés dans ma bibliothèque de classe? Je ne veux pas utiliser la réflexion :).

En tant que solution de contournement, j'ai stocké ces propriétés dans une classe du projet B (il peut donc être référé dans le projet A ainsi que le projet B) et a rendu ces propriétés statiques et tout fonctionne bien. Cependant, je suis toujours curieux de savoir si je les avais stockés dans app.xaml.cs? Des options disponibles?

Merci d'avance :)

Était-ce utile?

La solution

La classe d'applications doit exposer des choses qui sont seulement pertinent pour le projet d'application. Dès que vous avez réalisé que vous vouliez ces choses accessibles dans B.DLL, elles sont devenues pertinentes pour plus que le projet d'application et n'appartiennent donc plus au projet d'application.

L'ajout d'une classe à B.DLL qui transporte ces choses en tant que propriétés statiques pourrait être une approche raisonnable. Un autre modèle commun est d'avoir un seul Current propriété statique.

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

    public string SomeInstanceValue { get; set; }
}

A et B accéderaient à des choses en utilisant le modèle var x = MyClass.Current.SomeInstanceValue. L'avantage de cette approche est qu'il permet Current Property Getter pour déterminer si une instance "actuelle" est disponible ou non.

Vous pouvez également revoir la documentation sur Applicationlifetimeobjects.

Autres conseils

Lorsque A et B ont tous deux besoin de quelque chose, vous devriez peut-être les mettre dans un projet C (C comme en commun) et ensuite vous référer à C à la fois de A et B.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top