У меня есть решение вроде
ABC.Domain (.net стандарт 2.0)
ABC.Service (.net стандарт 2.0 + EFCore + EFCoreSQL)
ABC.AzureFunction(.net стандарт 2.0) v2
ABC.Web (.net core 2.0)
Я использую шаблон UnitOfWork и Repository в моем ABC.Service и внедряю с использованием собственного расширения DI ядра .net.,он работает в веб-проекте, но я не могу разрешить ссылку DbContext в функциях Azure.
ABC.Web (работает)
Startup.cs
services.AddEntityFrameworkSqlServer()
.AddDbContext<AnimalHubContext>(o =>
{
o.UseSqlServer(this.Configuration["Data:ConnectionString"]);
});
services.AddScoped<IAccountRepository, AccountRepository>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddSingleton<IAppConfigurationManager, AppConfigurationManager>();
services.AddSingleton<ICachingService, CachingService>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddScoped<ABCContext>();
ABC.AzureFunction
AzureFunction DI
public static async Task RunAsync([QueueTrigger("analyzeimage",
Connection = "animalhubnonblob_STORAGE")]string myQueueItem,
TraceWriter log,
[Inject(typeof(IUnitOfWork))]IUnitOfWork uow)
InjectConfiguration.cs
private void RegisterServices(IServiceCollection services)
{
string connectionString = "****************";
services.AddEntityFrameworkSqlServer()
.AddDbContext<AnimalHubContext>((serviceProvider, options)>
options.UseSqlServer(connectionString)
.UseInternalServiceProvider(serviceProvider));
services.AddScoped<ABCContext>();
services.AddScoped<IAccountRepository, AccountRepository>();
services.AddScoped<ICategoryRepository, CategoryRepository>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
}
Ошибка System.Private.CoreLib: исключение при выполненииФункция: AnalyzeImageFunction.Microsoft.Azure.WebJobs.Host: параметр привязки исключения 'uow'.Microsoft.Extensions.DependencyInjection: Не удалось разрешить службу с областью действия «AnimalHub.Persistence.IUnitOfWork» от корневого поставщика.