Моя маленькая, послушник, Bootstrapper
настраивает контейнер следующим образом:Почему Unity не находит мой параметризованный конструктор?
protected override void ConfigureContainer()
{
base.ConfigureContainer();
RegisterTypeIfMissing(typeof(IUserSettingsProvider), typeof(JsonUserSettingsProvider), true);
RegisterTypeIfMissing(typeof(IAppState), typeof(AppState), true);
Container.RegisterType<TripleDesEncryptionService>(new InjectionConstructor(App.CryptoKey));
Container.RegisterType<BaseViewModel>(new InjectionConstructor(Container.Resolve<IAppState>()));
}
и мой BaseViewModel
имеет только один CTOR:
public abstract class BaseViewModel : BindableBase, INotifyPropertyChanged
{
protected BaseViewModel(AppState appState)
{
AppState = appState;
}
...
}
Когда я пытаюсь запустить проект, загрузчик терпит неудачу на RegisterType<BaseViewModel>
и выдает следующее исключение.
System.InvalidOperationException: 'Тип ApptEase.Client.Infrastructure.ViewModels.BaseViewModel не конструктор, который принимает параметры (AppState).
AppState
создан и зарегистрирован в контейнере в коде запуска приложения:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var boot = new Bootstrapper();
boot.Run();
Container = boot.Container;
_appState = new AppState();
Container.RegisterInstance(typeof(AppState), _appState);
}
Вы не можете решить абстрактный класс, так как экземпляр не может быть создан – 3615
Плюс у него нет открытого конструктора ... –
@ 3615 Я не хочу разрешать абстрактный класс, но я хочу, чтобы ctor-инъекция для всех его подклассов. – ProfK