Эта строка кода второй пары решает проблему, просто любопытно, есть ли способ избежать повторной инъекции, или это необходимо?
Да, вторая пара необходима, поэтому я знаю все типы нужно вводить, как вы сказали в комментарии под вопросом, иногда вы вводите PropertyContext
, а иногда и CustomPropertyContext
. Так что это правильно, но вы можете упростить код, как показано ниже:
var connectionString = configuration.GetConnectionString("PMConnection");
services.AddDbContext<PropertyContext>(options => options.UseSqlServer(connectionString));
services.AddDbContext<CustomPropertyContext>(options => options.UseSqlServer(connectionString));
Как видите, я удаляю строки, которые внедряют базовый класс DbContext
, потому что вы сказали, что не вводите DbContext
базовый класс, но указанный c производный класс либо PropertyContext
, либо CustomPropertyContext
. Также вам нужно знать, что при многократной регистрации одного и того же типа (здесь DbContext
) последняя регистрация всегда выигрывает, когда вы запрашиваете экземпляр DbContext
. Таким образом, основываясь на приведенном ниже коде:
services.AddScoped<DbContext, PropertyContext>();
services.AddScoped<DbContext, CustomPropertyContext>();
Последняя регистрация побеждает, и вы всегда получите экземпляр CustomPropertyContext
, когда вы запросите один экземпляр DbContext
.