Я использую Простой инжектор, но каким-то образом я получаю ошибку, как указано в теме.Я пробовал много вещей, прежде чем решил опубликовать этот вопрос, например, это не работает для меня.Я получаю следующее исключение при вызове Validate
:
Сообщение об ошибке проверки:
Конфигурация недействительна.Сообщалось о следующих диагностических предупреждениях:
- [Одноразовый временный компонент] AlbumsController зарегистрирован как временный, но реализует IDisposable.
- [Устранимый временный компонент] ArtistsController зарегистрирован как временный, но реализует IDisposable.
- [Одноразовый временный компонент] HomeController зарегистрирован как временный, но реализует IDisposable.
См. Свойство Error для получения подробной информации о предупреждениях.См. https://simpleinjector.org/diagnostics, как исправить проблемы и как подавить отдельные предупреждения.
Application_Start
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register<IRepository<Artist>, ArtistRepository>(Lifestyle.Scoped);
container.Register<IRepository<Album>, AlbumRepository>(Lifestyle.Scoped);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
Я пытался добавить Lifestyle.Scoped
к моим регистрациям следующим образом:
container.Register<IRepository<Artist>, ArtistRepository>(Lifestyle.Scoped);
container.Register<IRepository<Album>, AlbumRepository>(Lifestyle.Scoped);
Контроллеры:
Примечание: репозитории внедряются IDisposable
.
public class HomeController : Controller
{
...
}
public class AlbumsController : Controller
{
readonly IRepository<Album> _repository;
public AlbumsController(IRepository<Album> repository)
{
_repository = repository;
}
...
}
Другие детали:
- Мои контроллеры не переопределяют метод
protected virtual void Dispose(bool)
. - I'mс помощью Simple Injector v4.4.0
- Я использую пакеты веб-интеграции v3.2.7