#c# #asp.net #reflection
#c# #asp.net #отражение
Вопрос:
Я хочу получить информацию о сборке в моем приложении на C #. Я использую следующее:
Assembly.GetCallingAssembly();
Это отлично работает, возвращая информацию о вызывающей сборке.
Я хочу поделиться этой функциональностью с другими приложениями, поэтому я включаю это в класс в моей библиотеке классов.
Я ссылаюсь на эту библиотеку классов в нескольких приложениях. Когда я вызываю этот метод из своих приложений, он возвращает информацию о библиотеке классов, а не о приложении. Есть ли способ, которым я могу изменить приведенный выше код, чтобы возвращать информацию о сборке веб-приложений, сохраняя при этом код, включенный в библиотеку классов?
Комментарии:
1. Возможно, вы задаете вопрос слишком низкого уровня. Чего вы пытаетесь достичь?
Ответ №1:
Вместо того, чтобы иметь интеллектуальную библиотеку классов, почему бы вам не попросить вызывающего абонента передать Assembly
методу аргумент as? Таким образом, когда вы вызываете метод из какого-либо приложения, которое вы передаете Assembly.GetExecutingAssembly()
, и метод в библиотеке классов теперь сможет извлекать сборку фактического вызывающего.
Ответ №2:
Я не уверен, что вы предоставляете поверх reflections, но, возможно, вы абстрагируете средство, которое не нужно абстрагировать. Reflections уже обрабатывает это, так почему бы не позволить ему выполнять свою работу?
Но если этот API возвращает вам некоторую полезную информацию (например, о правильном подключении к вашей базе данных и т. Д.), Тогда, Возможно, ваш подход имеет некоторый смысл. Но я все же рекомендую вам провести его рефакторинг:
- Поместите этот код только в один общий проект / сборку и просто свяжите этот проект / сборку, когда вам нужно вызвать эту функциональность. Необходимость дублирования кода для выполнения вашей работы считается запахом кода.
- Возьмите
Assembly
объект в качестве параметра, вместо того, чтобы пытаться определить текущую сборку. Это обеспечит большую гибкость в случае, если вы придумаете какой-то код, который хочет получить данные о куче других сборок, и все равно позволит вам передать текущую сборку. (Примечание: Дарин уже сделал это замечание)