Автоматическая регистрация всех файлов 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);
Другие вопросы по тегам