2013-04-01 2 views
4

이상한 오류가 있습니다. bin 폴더에 DLL을 업로드 한 후 내 사이트가 작동합니다. 나는 잠시 동안 그것을두고 (또는 내 공유 호스트 제어 패널에서 웹 사이트를 다시 시작 트리거) 내가Autofac : 웹 사이트 재시작 후 ComponentNotRegisteredException이 발생했습니다.

The requested service 'Nop.Core.Data.DataSettings' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency. 


[ComponentNotRegisteredException: The requested service 'Nop.Core.Data.DataSettings' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.] 
    Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters) +231 
    Autofac.ResolutionExtensions.Resolve(IComponentContext context, IEnumerable`1 parameters) +118 
    Autofac.ResolutionExtensions.Resolve(IComponentContext context) +75 
    Nop.Core.Infrastructure.DependencyManagement.ContainerManager.Resolve(String key) +156 
    Nop.Core.Infrastructure.NopEngine.Resolve() +110 
    Nop.Data.EfStartUpTask.Execute() +94 
    Nop.Core.Infrastructure.NopEngine.RunStartupTasks() +806 
    Nop.Core.Infrastructure.NopEngine.Initialize(NopConfig config) +90 
    Nop.Web.MvcApplication.Application_Start() +494[/i] 

사람이 어떻게 방법에 어떤 생각을 가지고 다음과 같은 오류를 얻을

을 단 후

이 문제를 해결하려면? 이 앱을 다시 시작처럼 보인다

감사

+0

또한 nopcommerce 2.8을 사용하고 있습니다. http://www.nopcommerce.com –

답변

4

BuildManager.GetReferencedAssemblies()을 사용하여 어셈블리를로드해야 AppDomain을 재활용 한 후에로드해야하는 것처럼 들립니다.

나는 과거에 비슷한 질문에 대한 응답 내용을 게시 한 :

Autofac Losing Registrations on Web.Config Edit

내가 이것에 대해 Autofac 위키에 몇 가지 메모를 추가합니다.

6

는 등록되지 않은 유형을 해결하려는 것이 원인입니다. 스택 추적은 일종의 시작 작업이 실행 중이고 해당 작업이 유형 Nop.Core.Data.DataSettings을 확인하려고 시도하고 있음을 보여줍니다.

먼저 Nop.Core.Data.DataSettings 유형이 Autofac에 등록 된 위치를 찾으십시오. 당신은

입니다
builder.RegisterType<DataSettings>(); 

DataSettings 유형이 Autofac.ContainerBuilder에 등록하기하여야한다 ..., 여러분의 코드 어딘가에, 뭔가를 보이는 라인을 볼 수 있습니다. 해당 행이 어디에도 없으면 유형을 등록해야합니다. Autofac은 등록되지 않은 유형을 "자동으로"해석하지 않습니다. (또는 Autofac으로 AnyConcreteTypeNotAlreadyRegisteredSource을 등록 할 수 있지만 일반적으로 과장입니다.)

라인을 찾을 수없는 경우 추가해야합니다. 애플리케이션에 의존하는 곳은 어디에도 있지만, Autofac에 물건이 등록되는 다른 장소가 있어야합니다.이 위치를 입력하는 것이 좋습니다.

이 이미 등록 된 경우 응용 프로그램을 다시 시작하지 않아도 항상 동일한 순서로 시작 작업이 실행되는 것은 아니며, 항상 동일한 시작 작업을 실행하지 않을 수도 있습니다. 이런 종류의 일은 여러 작업자 프로세스를 제대로 처리하지 못하거나 제대로 스레딩을 처리하지 않는 응용 프로그램 시작 (예 : HttpModule)에서 실행되는 코드가있는 경우 발생할 수 있습니다.

가능성이있는 다른 경우는 애플리케이션에 두 개의 Autofac 컨테이너가 있고 그 중 하나에 DataSettings이 있지만 다른 컨테이너에는 없습니다. 이것은 정말 최악의 경우지만 가능합니다.

다음으로 스택 추적을 따라 모든 코드를 살펴보십시오.DataSettings 개체를 해결하려는 부분을 찾아냅니다. 직접 해결되지 않을 수도 있습니다. 해결되는 다른 것에 대한 생성자 종속성 일 수 있습니다. 당신은 그것을 알아 내기 위해 코드에 빠져들게 될 것입니다.

어쨌든 Autofac 문제보다는 앱 시작 문제 인 것처럼 보입니다. Autofac은 등록을 "잃어 버리지"않습니다 - 등록되지 않은 것을 해결하려고한다는 불평을하는 경우 등록되지 않았습니다.

예외 메시지는 디버그를 위해 알아야 할 모든 것을 알려줍니다. - 해상도가 어디에서 발생하는지, 무엇을 찾고 있는지 ...앱 코드를 열어서 스택 추적에 표시된 실제 실행 경로를 살펴보고 해결 된 문제, 시간 및 이유를 확인하여 문제를 해결할 수있는 방법을 찾아야합니다.

+0

응답 해 주셔서 감사합니다! –

관련 문제