Я использую Abp.ZeroCore.EntityFrameworkCore
4.1.0 и пытаюсь добавить другой контекст (UnoDbContext
) в свое веб-приложение, например:
https://aspnetboilerplate.com/Pages/Documents/Entity-Framework-Core#replacing-default-repositories
Это мой код.
UnoDbContext.cs:
using Microsoft.EntityFrameworkCore;
using MyApp.Models;
using Abp.EntityFrameworkCore;
namespace MyApp.EntityFrameworkCore
{
public class UnoDbContext : AbpDbContext
{
/* Define a DbSet for each entity of the application */
public virtual DbSet<Anagrafica> Anagraficas { get; set; }
public UnoDbContext(DbContextOptions<UnoDbContext> options)
: base(options)
{
}
}
}
UnoDbContextConfigurer:
using System.Data.Common;
using Microsoft.EntityFrameworkCore;
namespace MyApp.EntityFrameworkCore
{
public static class UnoDbContextConfigurer
{
public static void Configure(DbContextOptionsBuilder<UnoDbContext> builder, string connectionString)
{
builder.UseSqlServer(connectionString);
}
public static void Configure(DbContextOptionsBuilder<UnoDbContext> builder, DbConnection connection)
{
builder.UseSqlServer(connection);
}
}
}
Startup.cs:
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Castle.Facilities.Logging;
using Abp.AspNetCore;
using Abp.Castle.Logging.Log4Net;
using MyApp.Authentication.JwtBearer;
using MyApp.Configuration;
using MyApp.Identity;
using MyApp.Web.Resources;
using Abp.AspNetCore.SignalR.Hubs;
using Abp.EntityFrameworkCore;
using MyApp.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace MyApp.Web.Startup
{
public class Startup
{
private readonly IConfigurationRoot _appConfiguration;
public Startup(IHostingEnvironment env)
{
_appConfiguration = env.GetAppConfiguration();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// MVC
services.AddMvc(
options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute())
);
IdentityRegistrar.Register(services);
AuthConfigurer.Configure(services, _appConfiguration);
services.AddScoped<IWebResourceManager, WebResourceManager>();
services.AddSignalR();
services.AddAbpDbContext<UnoDbContext>(options =>
{
options.DbContextOptions.UseSqlServer(options.ConnectionString);
});
// Configure Abp and Dependency Injection
return services.AddAbp<MyAppWebMvcModule>(
// Configure Log4Net logging
options => options.IocManager.IocContainer.AddFacility<LoggingFacility>(
f => f.UseAbpLog4Net().WithConfig("log4net.config")
)
);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseAbp(); // Initializes ABP framework.
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseJwtTokenMiddleware();
app.UseSignalR(routes =>
{
routes.MapHub<AbpCommonHub>("/signalr");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultWithArea",
template: "{area}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
контекст по умолчанию:
using Microsoft.EntityFrameworkCore;
using Abp.Zero.EntityFrameworkCore;
using MyApp.Authorization.Roles;
using MyApp.Authorization.Users;
using MyApp.MultiTenancy;
using MyApp.Models;
namespace MyApp.EntityFrameworkCore
{
public class MyAppDbContext : AbpZeroDbContext<Tenant, Role, User, MyAppDbContext>
{
/* Define a DbSet for each entity of the application */
public MyAppDbContext(DbContextOptions<MyAppDbContext> options)
: base(options)
{
}
}
}
Теперь, когда я пытаюсь использовать UnoDbContext в службе, я получаю эту ошибку:
Произошло необработанное исключение при обработке запроса.HandlerException: Не удается создать компонент HealthCareCRM.EntityFrameworkCore.UnoDbContext, так как он имеет зависимости, которые должны быть удовлетворены.
'HealthCareCRM.EntityFrameworkCore.UnoDbContext' ожидает следующих зависимостей:`1 [[HealthCareCRM.EntityFrameworkCore.UnoDbContext, HealthCareCRM.EntityFrameworkCore, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]] ', которое не было зарегистрировано.
Castle.MicroKernel.Handlers.DefaultHeden()
Может кто-нибудь сказать мне, где ошибка?