В приложении ASP.NET при попытке работать как с Simple Injector, так и с ELMAH следующий запрос на получение возвращает ошибку 500:
GET /elmah.axd/stylesheet возвращает ошибку 500.
Сообщение об ошибке:
Не удалось найти регистрацию для типа ManifestResourceHandler и выполнить неявную регистрацию. Чтобы контейнер мог создать ManifestResourceHandler, он должен иметь только один общедоступный конструктор: их 2. См. https://simpleinjector.org/one-constructor для получения дополнительной информации.
Трассировки стека:
SimpleInjector.ActivationException: No registration for type ManifestResourceHandler could be found and an implicit registration could not be made. For the container to be able to create ManifestResourceHandler it should have only one public constructor: it has 2. See https://simpleinjector.org/one-constructor for more information.
at SimpleInjector.Container.ThrowNotConstructableException(Type concreteType)
at SimpleInjector.Container.ThrowMissingInstanceProducerException(Type serviceType)
at SimpleInjector.Container.ThrowInvalidRegistrationException(Type serviceType, InstanceProducer producer)
at SimpleInjector.Container.GetRegistration(Type serviceType, Boolean throwOnFailure)
at WebApp.Global.InitializeHandler(IHttpHandler handler) in .......\Global.asax.cs:line 63
at WebApp.PageInitializerModule.<>c__DisplayClass1_0.<System.Web.IHttpModule.Init>b__0(Object sender, EventArgs e) in .......\Global.asax.cs:line 48
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
После ссылки «для получения дополнительной информации», упомянутой выше, есть дополнительная ссылка на некоторую документацию о том, как попытаться исправить эти типы ошибок. Ссылка: https://simpleinjector.readthedocs.io/en/latest/extensibility.html#overriding-constructor-resolution-behavior
Там предлагается 2 исправления. Я попробовал оба исправления и для каждого получил следующие разные ошибки.
Первое исправление
Где используется GreediestConstructorBehavior
. Это исправление дало следующее сообщение об ошибке и трассировку стека:
Сообщение об ошибке первого исправления:
Не удалось найти регистрацию для типа ManifestResourceHandler и выполнить неявную регистрацию. Конструктор типа ManifestResourceHandler содержит параметр resourceName типа String, который нельзя использовать для внедрения конструктора.
Трассировка стека первого исправления:
SimpleInjector.ActivationException: No registration for type ManifestResourceHandler could be found and an implicit registration could not be made. The constructor of type ManifestResourceHandler contains parameter 'resourceName' of type String which can not be used for constructor injection.
at SimpleInjector.Container.ThrowNotConstructableException(Type concreteType)
at SimpleInjector.Container.ThrowMissingInstanceProducerException(Type serviceType)
at SimpleInjector.Container.ThrowInvalidRegistrationException(Type serviceType, InstanceProducer producer)
at SimpleInjector.Container.GetRegistration(Type serviceType, Boolean throwOnFailure)
at WebApp.Global.InitializeHandler(IHttpHandler handler) in .......\Global.asax.cs:line 63
at WebApp.PageInitializerModule.<>c__DisplayClass1_0.<System.Web.IHttpModule.Init>b__0(Object sender, EventArgs e) in .......\Global.asax.cs:line 48
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Второе исправление
Где используется MostResolvableParametersConstructorResolutionBehavior
. Это второе исправление дало следующее сообщение об ошибке и трассировку стека:
Второе сообщение об ошибке исправления:
Не удалось найти регистрацию для типа ManifestResourceHandler и выполнить неявную регистрацию. Чтобы контейнер мог создать ManifestResourceHandler, он должен содержать общедоступный конструктор, содержащий только разрешаемые параметры.
Вторая трассировка стека исправлений
SimpleInjector.ActivationException: No registration for type ManifestResourceHandler could be found and an implicit registration could not be made. For the container to be able to create ManifestResourceHandler, it should contain a public constructor that only contains parameters that can be resolved.
at SimpleInjector.Container.ThrowNotConstructableException(Type concreteType)
at SimpleInjector.Container.ThrowMissingInstanceProducerException(Type serviceType)
at SimpleInjector.Container.ThrowInvalidRegistrationException(Type serviceType, InstanceProducer producer)
at SimpleInjector.Container.GetRegistration(Type serviceType, Boolean throwOnFailure)
at WebApp.Global.InitializeHandler(IHttpHandler handler) in .......\Global.asax.cs:line 63
at WebApp.PageInitializerModule.<>c__DisplayClass1_0.<System.Web.IHttpModule.Init>b__0(Object sender, EventArgs e) in .......\Global.asax.cs:line 48
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Спасибо всем, кто может помочь с этим.