Bu konuda SO ile ilgili benzer örneklerden bazılarını görmüştüm ama henüz yanlış yaptığımı görmek için bu dili yeterince bilmiyorum. Daha fazla bilgi edinmek için bir demoyu bir araya getirdim ama veritabanımı eklerken sorun yaşıyorum.ASP.NET Çekirdek 2 Çekirdek Veritabanı
Modeller/AppDbContext.cs
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<Product> Products{ get; set; }
public DbSet<Category> Categories { get; set; }
}
Modeller/DBInitializer.cs: Burada
Söz konusu üç dosyalar şunlardır:InvalidOperationException: Cannot resolve scoped service 'demoApp.Models.AppDbContext' from root provider.
Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, ServiceProvider serviceProvider)
aşağıdaki hatayı alıyorsunuz
public static class DbInitializer
{
public static void Seed(IApplicationBuilder applicationBuilder)
{
//I'm bombing here
AppDbContext context = applicationBuilder.ApplicationServices.GetRequiredService<AppDbContext>();
if (!context.Products.Any())
{
// Add range of products
}
context.SaveChanges();
}
private static Dictionary<string, Category> _categories;
public static Dictionary<string, Category> Categories
{
get
{
if (_categories == null)
{
// Add categories...
}
return _categories;
}
}
}
Startup.cs
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ICategoryRepository, CategoryRepository>();
services.AddTransient<IProductRepository, ProductRepository>();
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseStatusCodePages();
// Kersplat!
DbInitializer.Seed(app);
}
else ...
app.UseStaticFiles();
app.UseMvc(routes => {...});
}
birisi yanlış yaptığını ve nasıl durumu düzeltmek için ettiğimi açıklamak yardımcı olabilir misiniz? Orijinal Yanıtı
Neden 'Main'? 'Yi değiştirmek neden tercih edildiğine dair bir referans var mı? –
I Bağlantılı makalede, yukarıdaki kodun hemen altından bahseder. "Eski öğreticilerde, Startup.cs'deki Yapılandırma yönteminde benzer kod görebilirsiniz. Yapılandırma yöntemini yalnızca istek boru hattını ayarlamak için kullanmanızı öneririz. Uygulama başlatma kodu Ana yönteme aittir." – palehorse
NB: CreateScope yönteminin kullanılabilmesi için aşağıdaki ifadeye gereksinim vardır: 'Microsoft.Extensions.DependencyInjection;' kullanarak. – JohnLBevan