2014-06-16 4 views
0

Autofac과 함께 Caliburn.Micro v2을 사용하고 있으며 WindowManager.ShowDialog 기능과 관련된 몇 가지 문제가 있습니다.인스턴스 수명 관리

나는 성공적으로 표시 다음을 가지고 dialog :

windowManager.ShowDialog(dialogViewModel.Show(typeToShow)); 

cross 버튼을 통해 새로 표시된 창을 닫은 후 나는 위가 다시 한번 dialog를 볼 것으로 예상 되 경우에, 나는 다음과 같은 예외가 발생할 :

가시성을 설정하거나 창을 닫은 후에 Show, ShowDialog 또는 WindowInteropHelper.EnsureHandle을 호출 할 수 없습니다.

그것은 오류가 ShowDialog 한 번만 사용할 수있는 때문입니다 내 이해하고 내가 다시 ShowDialog를 호출 할 경우에 것을, 나는 새로운 인스턴스를 제공해야합니다. 내가 사용하여 어느 정도이 입증 :

windowManager.ShowDialog(new DialogViewModel().Show(typeToShow)); 

이 성공적으로 새로운 dialog 때마다 결과,하지만, 내가 여기 때마다 new을 호출하고자하지 않습니다. 따라서 Autofac에 동일한 인스턴스를 다시 사용하지 않고 매번 DialogViewModel의 새 인스턴스를 제공한다고 어떻게 말합니까?

편집 1 - 내가 이전 .SingleInstance()을 이용하여 제가 찾던 수 있습니다 .InstancePerDependency()를 사용하여 생각했다

var buider = new ContainerBuilder(); 
builder.Register(e => new DialogViewModel()) 
     .AsSelf() 
     .InstancePerDependency(); 

DialogViewModel 등록, 그것은 아니지만 나타납니다.

+0

어떻게하면 대화 뷰어 모델을 컨테이너에 등록 하시겠습니까? – nemesv

+0

@nemesv - VM 컨테이너 등록을 포함하도록 OP 편집. – Unflux

답변

1

Autofac에는 Func<T> 클래스를 통한 공장 지원이 내장되어 있습니다. DialogViewModel 대신 Func<DialogViewModel>을 해결하면 DialogViewModel을 반환하는 팩토리를 의미합니다. 기존 등록을 변경할 필요가 없습니다. wiki page.에 대한 자세한 정보

관련 문제