Ошибка возникает из-за того, что вы не зарегистрировали UserContext
, а только DbContext
.Измените вашу container.Register<DbContext>(...)
регистрацию на следующую:
container.Register<UserContext>(() => ...);
Также обратите внимание, что вы в настоящее время зарегистрировали UserContext
, используя стиль жизни Transient
, в то время как наиболее типичный стиль жизни для DbContext
- Scoped
:
container.Register<UserContext>(() => ..., Lifestyle.Scoped);
Это было бы очень легко сделать с помощью стандартного .NET Core DI.
Это очень просто и с Simple Injector :) С CoreD Мне нужна та же регистрация.
То, что вас смутило, - это то, что Simple Injector v4 по умолчанию пытается создать для вас конкретные незарегистрированные зависимости.UserContext
не был зарегистрирован, будучи конкретным.Simple Injector пытается создать его, но обнаружил, что не может разрешить одну из его зависимостей.Вот почему сообщение об ошибке указывает на DbContextOptions<UserContext>
, вместо этого ошибка «вы не зарегистрировали UserContext».
Чтобы исправить это, это поведение «разрешения незарегистрированных конкретных типов» изменится, начиная с v5.v5 по умолчанию не разрешает незарегистрированные конкретные типы больше.Это безопаснее и приведет к более очевидному сообщению об исключении.
С введением Simple Injector v4.5 мы представили опцию, которая позволяет вам переключиться на предстоящее поведение v5.Я советую сразу использовать этот новый параметр, так как он безопаснее и не допускает ошибок при переходе на v5.Вы можете сделать это следующим образом:
var container = new Container();
container.Options.ResolveUnregisteredConcreteTypes = false;