У меня есть проект ASP.NET Core, в котором у меня есть один класс DataDistaptcher
, который отправляет данные на основе реализации события, и другой класс LocationFilter
, который прослушивает это событие, чтобы выполнить некоторые действия на основе отправленных данных. .
Внутри DataDispatcher
есть метод:
public void UpdateData(string path)
{
//Upload Data
...
//Fire event
OnDataUpdated(EventArgs.Empty);
}
Конструктор LocationFilter
имеет вид:
public LocationFilter(IDataDispatcher dispatcher)
{
dispatcher.DataUpdated += new EventHandler((o,e) => UpdateData());
}
Я использую внедрение зависимостей в своем проекте и хочу обновить данные при запуске приложения, поэтому я получаю DataDispatcher
из IServiceProvider
и обновляю после app.UseMvc()
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ILocationFilter, LocationFilter>();
services.AddSingleton<IDataDispatcher, DataDispatcher>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider provider)
{
app.UseMvc();
var dispatcher = provider.GetRequiredService<IDataDispatcher>();
dispatcher.UpdateData("File path");
}
Теперь у меня есть контроллер, в который вводится LocationFilter
:
public Controller(ILocationFilter filter)
{
//Filter dosen't contain data from dispatcher
}
Если я перенесу обновление диспетчера на Controller
, событие сработает, и LocationFilter
отправит данные.
Так что я не хочу запускать обновления с каждым запросом, я хочу обновлять только при запуске, так где я должен поместить метод dispatcher.update()
?