2012-01-26 2 views
0

사이트의 초기 배포가 정상적으로 작동합니다. 약 2-3 시간 후, 컨트롤러는 갑자기 의존성을 해결할 수 없기 때문에 인스턴스화 할 수 없습니다 (또는 적어도 오류 메시지가 알려주는 것입니다).간헐적으로 "인터페이스를 구성 할 수 없습니다. 유형 매핑이 누락 되었습니까?"

나는 여러 가지를 시도했지만 어느 것도 해결하지 못하는 것 같습니다. 누구든지 내가 확인할 수있는 아이디어가 있습니까?

+0

흠, 그것이 용기 수명 관리자와 관련이 있는지 궁금해합니다. 아마도 폐기 될 것입니다. – Alfred

+0

항상 생성 할 수 없다는 불만과 동일한 인터페이스입니까? Unity가 갑자기 이전에 가지고 있던 인터페이스 구현을 해결하는 능력을 잃어 버리는 것을 볼 수 없습니다. 이것은 오류 메시지가 나타내는 것입니다. –

+0

예, 동일한 인터페이스 – Alfred

답변

0

나는 아직도 어떤 일이 일어나고 있는지 전혀 모르지만 나는 그것을 고칠 수 있었다. 제 구성 요소와 매핑을 등록하기 위해 타사 부트 스트랩 링 라이브러리를 사용하고있었습니다. 그러나 MEF와 함께 내 자신을 압연하고 등록을 직접 관리 한 후에 문제는 사라졌습니다. 나는 그것이 없어야 할 때 물건을 버림으로써 뭔가 펑키하고 있다고 생각합니다. 도와 주셔서 감사합니다. 경우 누군가에

는 다음과 같은 선언으로 http://bootstrapper.codeplex.com/를 사용하여이 문제가 발생 : 나는 대체

Bootstrap.Bootstrapper 
     .With.Unity() 
     .And.AutoMapper() 
     .And.ServiceLocator() 
     .Start(); 

을 그와 :

IUnityContainer container = new UnityContainer(); 
    MEFContainer mefContainer = new MEFContainer(); 
    mefContainer.UnityRegistry.ForEach(x => x.Register(container)); 
    container.RegisterInstance<IMappingEngine>(Mapper.Engine); 
    mefContainer.AutoMapperRegistry.ForEach(x => x.CreateMap(Mapper.Configuration)); 

private class MEFContainer 
    { 
     [ImportMany(typeof(IUnityRegistration))] 
     public List<IUnityRegistration> UnityRegistry { get; set; } 

     [ImportMany(typeof(IMapCreator))] 
     public List<IMapCreator> AutoMapperRegistry { get; set; } 

     public MEFContainer() 
     { 
      var catalog = new DirectoryCatalog("bin"); 
      var compositionContainer = new CompositionContainer(catalog); 
      compositionContainer.ComposeParts(this); 
     } 
    } 

참고 IUnityRegistration.Register () 및 IMapCreator.CreateMap()은 세 번째 파에서 정의됩니다. 타이 코드. MEF는 System.ComponentModel.Composition, 및 System.ComponentModel.Composition.Hosting을 참조합니다. 결국 리팩터링 할 것입니다.

0

최근에 우리는 인터셉터 중 하나와 비슷한 상황이었습니다. 갑자기 더 이상 작동하지 않습니다. 어셈블리 X.Y.Z에 정의 된 인터페이스에 대한 모든 호출을 인터셉트합니다. dll. 그러나 OS는 파일 X.Y.Z를 호출하기로 결정했습니다. 잠시 후 DLL. 그 동안에는 새로운 배포가 발생하지 않았습니다. 하지만 갑자기 이름이 일치하지 않았습니다. 구성에 이름으로 어셈블리를로드합니까? 어쩌면 문자열 비교에서 IgnoreCase를 확인해야합니다.

또 다른 아이디어 : 개체에 대해 일종의 캐시를 사용합니까? 또는 캐시 기반 LifetimeManager? 캐시 항목이 잠시 후에 무효화되면 해당 객체를 잃게됩니다.

관련 문제