Автоматическая регистрация всех файлов ViewModel и View
Я изучаю использование DryIoc с Caliburn.Micro, и я хотел бы автоматически зарегистрировать все ViewModels и Views.
В AutoFac вы можете сделать что-то вроде этого
builder.RegisterAssemblyTypes(AssemblySource.Instance.ToArray())
.Where(type => type.Name.EndsWith("ViewModel"))
.Where(type => type.GetInterface(ViewModelBaseType.Name, false) != null)
.AsSelf()
.InstancePerDependency();
Есть ли аналогичный способ в DryIoc?
1 ответ
Решение
Эквивалентный код в DryIoc:
container.RegisterMany(AssemblySource.Instance.ToArray()
.SelectMany(Portable.GetAssemblyTypes)
.Where(type => type.Name.EndsWith("ViewModel"))
.Where(type => type.GetInterface(ViewModelBaseType.Name, false) != null));
Повторное использование по умолчанию будет Transient, который совпадает с InstancePerDependency
,
Обновить:
Есть также немного более простая и более идиоматическая альтернатива:
container.RegisterMany(AssemblySource.Instance,
serviceTypeCondition: type =>
type.Name.EndsWith("ViewModel") &&
type.GetInterface(ViewModelBaseType.Name, false) != null);