$doc/param[@value = "valueB"]/fn:data(@value)
Предполагая, что $ doc имеет Xml.
Вы должны создать некоторый фоновый рабочий для обработки потока очереди.
public void BeginProcessing()
{
while(true)
{
Это поймает вызывающий поток в бесконечный цикл. Попробуйте использовать задачу или фоновый работник. Вы даже можете поместить его в очередь самостоятельно, чтобы скрыть его от основного приложения.
Чтобы начать BeginProcessing, из main, получите ваш встроенный контейнер и запросите IQueue. вызовите свой IQueue.BeginProcessing () и продолжите запуск в обычном режиме. Если все работает, как ожидалось, всякий раз, когда IQueue get вводится в контроллер, он будет таким же, каким вы запустили BeginProcessing на & amp; у вас должен быть доступ к нему в контексте контроллера
Я закончил тем, что нашел решение для своего варианта использования, не полагаясь на абсурдную абстракцию или какую-то непонятную часть .NET Framework. Будь это лучшая практика или нет, я не знаю. Но это работает и делает то, что мне нужно, и в конце концов, это то, что каждый действительно хочет.
Мое решение:
Зарегистрируйте ваш синглтон в структуре DI, вставьте зависимость в метод Configure
, затем запустите метод обработки в другой поток.
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSingleton<IQueue, Queue>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IQueue queue)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
Task.Run(() => queue.BeginProcessing());
app.UseHttpsRedirection();
app.UseMvc();
}