나는 분자 유형별로 다른 화면 (WPF)을 표시하는 간단한 시스템을 가지고 있습니다. 사용자는을 선택합니다. 이를 위해 Caliburn.Micro와 Iof Container로 Autofac을 함께 사용하고 있습니다.Autofac 자체 레지스터 TypedNamedAndKeyedServices
는 간단한 명명 규칙이 예상된다
[MoleculeName] < -> [MoleculeName] 뷰 모델 -> [MoleculeName]보기
Caliburn.Micro 뷰/뷰 모델 규칙을 제공
내 목표는 분자 < -> MoleculeViewModel 부분을위한 대회를 재현하는 것입니다.각 분자는 형태로 표현되고 IMolecule
public Interface IMolecule {...}
IOC의이 AutoFac에 의해 제공된다 상속과 잘 다음 작품 :
그래서private void ConfigureMoleculesLibs(Autofac.ContainerBuilder builder)
{
var builder = new ContainerBuilder();
// get assemblies
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
// register molecules
builder
.RegisterAssemblyTypes(assemblies)
.Where(t => t.IsAssignableTo<IMolecule>())
.AsSelf();
// register molecules view models
builder
.RegisterType<H2SO4MoleculeViewModel>()
.Keyed<Type>(TypeOf(H2SO4Molecule));
builder
.RegisterType<HClMoleculeViewModel>()
.Keyed<Type>(TypeOf(HClMolecule));
builder
.RegisterType<H2oMoleculeViewModel>()
.Keyed<Type>(TypeOf(H2oMolecule));
}
다음이 허용된다 :
public class MoleculeWrapperViewModel : Screen
{
public delegate MoleculeWrapperViewModel Factory(IMolecule molecule);
public MoleculeWrapperViewModel(
IIndex<Type, Screen> moleculeScreensLookup,
IMolecule molecule)
{
this.MoleculeViewModel = moleculeScreensLookup[molecule.GetType()];
}
public Screen MoleculeViewModel { get; private set; }
}
Caliburn이 Views와 ViewModels 사이에서하는 것과 같은 방식으로 이름을 해당 ViewModel과 일치시킴으로써 Keyed Types를 자동으로 등록 하시겠습니까?