私はカリバーンマイクロを学んでおり、公式サイトEventAggregator
から活用しようとしています。
ただし、例外があります
「このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。」
メッセージ自体は明確ですが、例にはパラメーターなしのコンストラクターも含まれていません。1つ追加すると、パラメーターを持つコンストラクターはヒットせず、IEventAggregator
まだ正しく注入されません。
パラメーターなしのコンストラクターを追加した後のパブリッシャー VM を次に示します (それがないと、例外がスローされます)。
public MainViewModel() { }
public MainViewModel(IEventAggregator ea) : this()
{
eventAggregator = ea;
}
そして、ここに私が使用しているブートストラップがあります:
public class AppBootstrapper : Bootstrapper<MainViewModel>
{
private readonly SimpleContainer container = new SimpleContainer();
protected override void Configure()
{
container.Singleton<IEventAggregator, EventAggregator>();
}
}
CM の例を次に示します。
// Creating the EventAggregator as a singleton.
public class Bootstrapper : BootstrapperBase {
private readonly SimpleContainer _container =
new SimpleContainer();
// ... Other Bootstrapper Config
protected override void Configure(){
_container.Singleton<IEventAggregator, EventAggregator>();
}
// ... Other Bootstrapper Config
}
// Acquiring the EventAggregator in a viewModel.
public class FooViewModel {
private readonly IEventAggregator _eventAggregator;
public FooViewModel(IEventAggregator eventAggregator) {
_eventAggregator = eventAggregator;
}
}
私はこの投稿(Caliburn Microを使用してEventAggregatorをViewModelに注入する)を確認しましたが、CMがインジェクションでコンストラクターを呼び出さない理由は何も述べていません。
CMのサンプル溶液も確認しましたが、DI溶液としてMEFを使用しています。
何が恋しいですか?