Вы можете использовать scope.ServiceProvider.GetServices<IMongoMapper>();
, чтобы получить все классы, которые реализуют интерфейс IMongoMapper
.
Вы можете использовать метод расширения и вызывать его в Configure
методе в startup
классе.
public static void IntializeMapping(this IApplicationBuilder app)
{
using (var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var mappers = scope.ServiceProvider.GetServices<IMongoMapper>();
foreach (var map in mappers)
{
map.Configure();
}
}
}
и используйте его в startup
классе
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.IntializeMapping();
}
Обновление
Согласно документации Microsoft лучше использовать это
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
try
{
var mappers = scope.ServiceProvider.GetServices<IMongoMapper>();
foreach (var map in mappers)
{
map.Configure();
}
}
catch (Exception ex)
{
var logger = service.GetService<ILogger<Program>>();
logger.LogError(ex, "An error occurred mapping");
}
}
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Документация Microsoft В более старых руководствах вы можете увидеть похожий код в методе Configure
в Startup.cs
. Мы рекомендуем использовать метод Configure
только для настройки конвейера запросов. Код запуска приложения принадлежит методу Main.
Теперь при первом запуске приложения база данных будет создана и заполнена тестовыми данными. Всякий раз, когда вы изменяете свою модель данных, вы можете удалить базу данных, обновить свой начальный метод и начать заново sh с новой базой данных таким же образом. В следующих руководствах вы узнаете, как изменить базу данных при изменении модели данных, не удаляя и не создавая ее заново.