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