私の小さな、初心者、次のように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
さらに、publicコンストラクタもありません。 –
@ 3615抽象クラスを解決したくありませんが、すべてのサブクラスに対してctor注入が必要です。 – ProfK