Я работаю над проектом asp. net core mvc и пытаюсь внедрить объект базы данных в представление для извлечения чего-либо из него внутри представления.
Я внедрил класс в startup.cs и использовал @inject, но все равно получаю исключение.
InvalidOperationException: Служба для типа 'DbServices.CredentialDb' не зарегистрирована.
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
Это метод Startup.cs ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddIdentity<ApplicationUser, IdentityRole>(
options => options.User.AllowedUserNameCharacters = null)
.AddEntityFrameworkStores<AppDbContext>();
services.AddControllersWithViews();
services.AddDbContextPool<AppDbContext>(
options => options.UseSqlServer(
_config.GetConnectionString("AutoLoverDbConnection"),
x => x.MigrationsAssembly("AutoMatcherProjectAss"))
.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking));
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSingleton<ISessionManager, ClientSIdeSessionManager>();
services.AddHttpContextAccessor();
services.AddSession();
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies
// is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(60); //You can set Time
options.Cookie.HttpOnly = true;
});
services.AddTransient<ISche, SchedulerImpl>();
services.AddTransient<IQueue, QueueImpl>();
services.AddTransient<SchedulerJob>();
services.AddTransient<IBotFactory, BotFactory>();
services.AddTransient<ICredentialDb, CredentialDb>();
services.AddSingleton(provider => _scheduler);
services.AddAuthentication().AddFacebook(options =>
{
options.AppId = APP_ID;
options.AppSecret = APP_SECRET;
options.SaveTokens = true;
});
_scheduler.Clear();
}
, где я добавил класс доступа к базе данных:
services.AddTransient<ICredentialDb, CredentialDb>();
, и это инъекции в представлении HTML страница:
@using Microsoft.AspNetCore.Identity;
@using DbServices
@inject CredentialDb DataAccess
@inject UserManager<ApplicationUser> signIn