#asp.net-core #dependency-injection #entity-framework-core #ef-core-3.1
#asp.net-core #внедрение зависимостей #entity-framework-core #ef-core-3.1
Вопрос:
Хотя сообщение об ошибке кажется очевидным, я считаю, что оно отличается от других вопросов. Как вы можете видеть в моем, Startup
я зарегистрировал IBlobModelCache
службу.
public class Startup
{
...
public virtual void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<DataContext>(options =>
{
options
.ReplaceService<IEntityMaterializerSource, Domain.EntityMaterializerSource>();
.UseSqlServer(
Configuration.GetConnectionString("Default"),
opt => opt.MigrationsAssembly("API")
);
});
services
.AddAuthentication(ConfigureAthentication)
.AddJwtBearer(ConfigureJwtBearer);
services
.AddLogging(ConfigureLogging)
.AddTransient<IBlobPersisterFactory, BlobPersisterFactory>()
.AddTransient<IBlobDbContextSavingHandler, BlobDbContextSavingHandler>()
.AddTransient<IBlobDbContextModelCreator, BlobDbContextModelCreator>()
.AddSingleton<IBlobModelCache, BlobModelCache>() // It is here
.AddOptions<DiskBlobStorageSettings>().Configure<IConfiguration>((settings, config) => config.Bind("BlobStorage", settings));
}
...
}
И вот конструктор моих служб, чтобы вы могли видеть, что в них нет никакого цикла.
class EntityMaterializerSource : Base.EntityMaterializerSource
{
public EntityMaterializerSource(
[NotNull] EntityMaterializerSourceDependencies dependencies,
IBlobModelCache blobModelCache
)
: base(dependencies)
{
BlobModelCache = blobModelCache;
OnMaterializedMethod = typeof(EntityMaterializerSource)
.GetMethod(nameof(OnMaterialized), BindingFlags.Instance | BindingFlags.NonPublic);
}
}
class BlobModelCache : IBlobModelCache
{
// Has no constructor
}
BlobModelCache
Проблема успешно решена в других службах, и ошибка возникает только тогда, когда EF необходимо материализовать объекты.
Все, что мне нужно, это получать уведомления, когда объект материализуется из базы данных, и я не смог найти никакого решения, кроме расширения EntityMaterializerSource. Я использую EF Core 3.1.8 и ASP.Net Ядро 3.1.