2011-10-06 33 views
5

Deseo obtener información sobre un ensamblaje en mi aplicación C#. Yo uso el siguiente:obtener información sobre un conjunto

Assembly.GetCallingAssembly(); 

Esto funciona perfectamente devolver información sobre la Asamblea de llamada.

Quiero compartir esta funcionalidad con otras aplicaciones, así que incluyo esto en una clase de la biblioteca de mi clase.

Hago referencia a esta biblioteca de clases en múltiples aplicaciones. Cuando realizo una llamada a este método desde mis aplicaciones, devuelve información en la biblioteca de clases y no en la aplicación. ¿Hay alguna manera de que pueda modificar mi código anterior para devolver información en el ensamblado de las aplicaciones web mientras aún tengo el código incluido en la biblioteca de la clase?

+0

Es posible que esté haciendo una pregunta de muy bajo nivel. ¿Qué estás intentando lograr? –

Respuesta

3

En lugar de tener la biblioteca de clases siendo inteligente ¿por qué no hace que la persona que llama pase un Assembly como argumento para el método? Por lo tanto, cuando llame al método desde alguna aplicación, pasará Assembly.GetExecutingAssembly() y el método dentro de la biblioteca de clases ahora podrá recuperar el ensamblador de la persona que llama.

0

No estoy seguro de lo que proporciona en la parte superior de los reflejos, pero tal vez está abstrayendo una instalación que no necesita ser abstraída. Reflections ya maneja esto, ¿por qué no dejar que haga su trabajo?

Pero si esta API le devuelve información útil (como conectar bien en su base de datos, etc.), entonces tal vez su enfoque tenga algún sentido. Pero aún así, recomiendo que refactorizar:

  • poner este código en un solo proyecto/ensamblado compartido, y simplemente enlazar ese proyecto/montaje cuando se necesita llamar a esa funcionalidad. Necesitar duplicate code para hacer su trabajo se considera code smell.
  • Tome un objeto Assembly como parámetro, en lugar de intentar determinar el ensamblaje actual. Esto permitirá una mayor flexibilidad en caso de que encuentre algún código que quiera obtener datos en un conjunto de otros conjuntos, y aún le permitirá pasar el ensamblaje actual. (Nota: Darin ya hizo este punto)
Cuestiones relacionadas