Извините за медленный ответ.
Лучше всего в Autofac использовать правило для регистрации ViewModel
s и применить параметр для разрешения другой реализации ObservableCollection<>
:
// Default for other components
builder.RegisterGeneric(typeof(ObservableCollection<>));
// Won't be picked up by default
builder.RegisterGeneric(typeof(DispatcherNotifiedObservableCollection<>))
.Named("dispatched", typeof(ObservableCollection<>));
var viewModelAssembly = typeof(AViewModel).Assembly;
builder.RegisterAssemblyTypes(viewModelAssembly)
.Where(t => t.Name != null && t.Name.EndsWith("ViewModel"))
.WithParameter(
(pi, c) => pi.ParameterType.IsClosedTypeOf(typeof(ObservableCollection<>)),
(pi, c) => c.ResolveNamed("dispatched", pi.ParameterType));
Вам нужно быть using Autofac;
для IsClosedTypeOf()
.Кроме того, если используемая вами версия Autofac не поддерживает эту перегрузку WithParameter()
, вы можете использовать перегрузку, которая принимает Parameter
и вместо нее передает ResolvedParameter
.
Надеюсь, это поможет,
Ник