Я хочу получить доступ к базе данных / dbContext в другом классе (называемом FileWatcher) за пределами контроллеров. Это веб-приложение также использует Hangfire для постоянного прослушивания каталога для вновь создаваемых файлов, ему необходимо проанализировать файлы и добавить информацию в базу данных.
так мой startup.cs выглядит так:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<JobsContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddHangfire(config =>
config.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHangfireDashboard("/hangfire");
app.UseHangfireServer();
FileWatcher = new FileWatcher();
BackgroundJob.Enqueue(() => FileWatcher.Watch());
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
мой класс FileWatcher:
public class FileWatcher
{
private string inbound_path = "Inbound";
public void Watch()
{
var watcher = new FileSystemWatcher();
watcher.Path = inbound_path;
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.Filter = "*.*";
watcher.Created += new FileSystemEventHandler(OnCreated);
watcher.EnableRaisingEvents = true;
}
private void OnCreated(object source, FileSystemEventArgs e)
{
//SOME FILE PARSING METHOD WILL BE INVOKED HERE WHICH RETURNS A MODEL
//ACCESS DB HERE AND
}
}
мой файл dbContext:
public class dbContext : DbContext
{
public dbContext(DbContextOptions<dbContext> options) : base(options)
{
}
public DbSet<Car> Cars { get; set; }
public DbSet<Van> Vans{ get; set; }
}
извиняюсь, если недостаточно информации, я предоставлю дополнительную информацию, если потребуется / спросим.
был бы очень признателен, если бы кто-то смог предоставить решение, и если мой код можно улучшить для того, для чего он мне нужен.