Веб или консольное приложение, как получить контекст приложения текущей DLL

1

У меня есть общая библиотека инструментов С# Tools, которая используется как в библиотеке консоли, так и в веб-приложении. В зависимости от того, используется ли DLL в веб-приложении или в консоли, мне нужны определенные методы для выполнения по-разному.

Есть ли способ определить, находимся ли мы в контексте веб-контекста или консольного приложения из данного метода? Я понимаю, что для этого могу использовать файл конфигурации, но в моей ситуации было бы предпочтительнее, если бы я смог выполнить это в методе.

  • 1
    Вы не можете отправить какой-либо параметр, указывающий тип вашей среды в вашем контексте?
  • 0
    Я думаю, что проблема здесь в том, что методы вызываются из слишком большого количества мест, добавление этого дополнительного параметра во всех местах является неуклюжим.
Теги:

1 ответ

1
Лучший ответ

Вы должны параметризовать эту информацию и передать ее классу/методам, которые вы хотите использовать.

Вы не можете определить (надежным способом), если одно приложение является веб-приложением или консольным приложением, поскольку они не являются взаимно исключающими. Консольное приложение также может вести себя как веб-приложение, в качестве примера возьмите OWIN.

Если вы настаиваете на том, чтобы сделать это автоматически, вы определяете и используете атрибут в исполняемой сборке:

[AttributeUsage(AttributeTargets.Assembly)]
public class AppModelAttribute : Attribute {
    public ModelType Model {get;private set} // This one can be an enum type with values Web, Console

    public AppModel(ModelType type)
    {
        this.Model = type;
    }
}

Добавьте эту сборку в свою исполняющую сборку:

[assembly: AppModelAttribute(ModelType.Web)]

Затем вы можете запросить этот атрибут и определить, является ли исполняющая сборка Web или консолью:

var attributes = assembly
    .GetCustomAttributes(typeof(AppModelAttribute), false)
    .Cast<AppModelAttribute>();

Вышеуказанный запрос берется здесь.

EDIT: Я имею в виду, что консольное приложение может запускаться как веб-сервер и вести себя как обычное веб-приложение, например, класс HttpServer может использоваться в любом виде приложения и позволяет вам отвечать на http-сообщения (GET, POST и т.д.). OWIN является примером консольного приложения, ведущего себя как веб-приложение.

Тем не менее вы можете определить веб-приложение как приложение, работающее в IIS в вашем контексте. Затем вам нужно как-то проанализировать процесс и посмотреть, действительно ли он размещен IIS, но это, безусловно, будет излишним.

  • 0
    Спасибо, это очень полезно! Могу ли я попросить вас уточнить, что вы подразумеваете под консольными и веб-приложениями, не являющимися взаимоисключающими. Я проверил предоставленную вами ссылку OWIN, но мне кажется, что мое приложение работает под управлением IIS или нет, поэтому они кажутся взаимоисключающими или я что-то упустил?
  • 0
    @ shev72, я добавил некоторые пояснения в мою правку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню