2017-09-13 1 views
2

Xamarin.Forms를 사용하여 Prism.DryIoc.Forms를 사용하여 응용 프로그램을 만듭니다. 앱의 시작 시간을 최소화하기 위해 의존성이 많은 클래스에 Lazy < 패턴을 사용하고 있습니다.Lazy <> with Prism.DryIoc.Forms를 사용하면 "컨테이너가 가비지 수집 됨"예외가 발생합니다.

이 값은 Prism.Unity.Forms에서 제대로 작동하는 데 사용됩니다. 그러나, 나는 그것을 Prism.DryIoc.Forms와 함께 사용할 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

코드는 다음과 같습니다. 우리는이 같은 페이지 뷰 모델을 가지고 : 페이지 뷰 모델이 인스턴스화 된 후 _lazySomeClass.Value를 호출 할 때

public class MySamplePageViewModel 
{ 
    private readonly Lazy<ISomeClass> _lazySomeClass; 

    public MySamplePageViewModel(Lazy<ISomeClass> lazySomeClass) 
    { 
     _lazySomeClass = lazySomeClass; 
    } 

    public void SomeMethod() 
    { 
     _lazySomeClass.Value.DoIt(); //throws exception 
    } 
} 

그러나, 우리는 컨테이너는 더 이상 사용할 수 없습니다 "라는 메시지와 함께 예외가 (garbage-있다 수집). ". 호출 할 때하기 때문에 프리즘 뷰 모델을 확인하는 방법과 관련이있을 것 같습니다 잘 작동 다음

var container = (Application.Current as PrismApplicationBase<IContainer>).Container; 
var lazySomeClass = container.Resolve<Lazy<ISomeClass>>(); 
lazySomeClass.Value.DoIt(); //works fine 

우리는 다음과 같이 등록을하고있는 :

container.Register<ISomeClass, SomeClass>(Reuse.Singleton); 
container.RegisterTypeForNavigation<MySamplePage, MySamplePageViewModel>("MySamplePage"); 
+0

DryIoc 자체의 버전은 무엇입니까? – dadhi

+0

Prism.DryIoc.Forms 6.3.0.1에서 작동 할 수있는 유일한 드라이버이기 때문에 DryIoc 2.10.1을 사용하고 있습니다. 더 높은 버전의 DryIoc을 사용하면 '파일 또는 어셈블리'DryIoc, 버전 = 2.12.1.0, Culture = neutral, PublicKeyToken = null '또는 그 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. 컨테이너에 액세스 할 때 . –

답변

2

문제는해야한다 v2.10.3로 고정

따라서 다음 단계는 Prism.DryIoc.Forms 관리자에게 최신 DryIoc 버전으로 업데이트하도록 요청하는 것입니다.

+0

프리즘 7은 이미 새로운 버전을 대상으로합니다. 최신 6.3 릴리스를 사용하는 경우 응용 프로그램에서 DryIoc을 업데이트하기 만하면됩니다. –

+0

필자는 DryIoc 버전 2.10.7을 사용하는 Prism.DryIoc.Forms 버전 7.0.0.51-ci를 테스트했으며 매력적으로 작동했습니다. @ Dan. 프리즘을 업데이트하지 않고 DryIoc을 간단히 업데이트하면 작동하지 않습니다. Prism.DryIoc.Forms 6.3.0.1은 DryIoc 2.10.1에서만 작동하며 (더 높은 버전은 아님) –