2012-06-21 21 views
5

Estoy trabajando con una aplicación WPF en C#. Tengo una serie de constantes definidas en una clase estática como la siguiente:¿Cómo acceder a una clase estática en el mismo espacio de nombres pero a otro ensamblado?

Proyecto1:

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

Entonces todo lo que tengo que hacer para acceder a mi constante en cualquier lugar dentro del Proyecto 1 es:

int x = Constants.MY_CONSTANT; 

Ahora añado otro proyecto a la misma solución, y utilizar el mismo espacio de nombres raíz:

proyecto 2

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

No puedo encontrar una manera de acceder a mi clase de constantes estáticas desde el segundo ensamblaje. Tampoco puedo agregar una referencia al primer ensamblaje, porque conduce a una dependencia circular (el segundo ensamblaje del proyecto es un control WPF utilizado por el primer ensamblaje del proyecto).

¿Es lo que estoy tratando de hacer posible? Actualmente mi solución está pasando todas las constantes requeridas en el constructor, pero prefiero simplemente acceder a ellas directamente.

+4

Necesita una referencia; necesitará resolver su dependencia circular; tal vez traslade la clase de constantes a un tercer ensamblaje al que puedan hacer referencia ambos ensamblajes. – Blorgbeard

+0

al lado del punto: si quiere una constante, ¿por qué no la declara como constante 'const int pública MY_CONSTANT = 123456;'? – Hinek

Respuesta

2

Puede mover todas las constantes estáticas del proyecto 1 al proyecto 2, por lo tanto, todas las constantes son visibles tanto para el proyecto 1 como para el proyecto 2; Le recomendé que presentara otro proyecto (tal vez común) que podría ayudar a administrar todos los productos que compartían todos los otros proyectos. es un proyecto de infraestructura común.

+0

Aceptaré la introducción de una tercera asamblea como respuesta. Por alguna razón, pensé que siempre que esté en el mismo espacio de nombres no necesito referencias. – Eternal21

0

Tiene que agregar una referencia en el Proyecto 1 al Proyecto 2, entonces debería funcionar bien. ¿Necesitas un gráfico para ilustrar cómo?

He aquí un enlace de MSDN http://msdn.microsoft.com/en-us/library/wkze6zky.aspx

Y aquí es una respuesta SO con imágenes>Adding projects to a project in Visual Studio 2010

+0

El Proyecto 1 es un proyecto WPF que usa un control WPF dentro del Proyecto 2, por lo que estoy bastante seguro de que ya lo hace referencia. Desafortunadamente mi código está en funcionamiento, por lo que no podré volver a verificarlo hasta mañana. Te contactaré luego. – Eternal21

+0

Bueno, es un poco extraño pedirnos que lo ayudemos a resolverlo cuando no puede verificarlo ;-) – jcolebrand

+0

Estaba trabajando desde la memoria, ya que el problema me ha estado molestando en casa. Acabo de marcar y sí, el Proyecto 1 tiene una referencia al Proyecto 2. – Eternal21

0

La otra respuesta es estrecha, pero en realidad es al revés: Proyecto 2 necesita una referencia de los proyectos 1. El código debe luego compila

EDIT:

Lo sentimos, veo que ya ha considerado esto. Sí, alguien comentó para evitar un problema de dependencia circular al presentar un tercer ensamblaje.

+0

Para mí, la diferencia entre "Proyecto 1" y "Proyecto 2" es meramente de direccionalidad.Si hubiera dado nombres, como "AutoManufacturers" y "CarDealerships" podría haber sido más explícito. No confunda los nombres genéricos no direccionales para que impliquen intención, pero busque la intención inherente en el ejemplo, como la pregunta vinculada que mostró la referencia de un proyecto dentro de otro. – jcolebrand

+0

Lo siento, es la primera pregunta que hice en StackOverflow, y traté de mantener el código lo más genérico posible para que sea más fácil de analizar. Parece que al final lo corté demasiado. – Eternal21

+0

Siéntase libre de ser altamente explícito en el futuro, sin violar las NDA. – jcolebrand

Cuestiones relacionadas