私はWPFでPrismを使用しています。 IEventAggregatorをViewModelコンストラクタのパラメータとして追加すると、このエラーが発生します。Microsoft.Practices.ServiceLocation.dllで 'Microsoft.Practices.ServiceLocation.ActivationException'型の例外が発生しました。 追加情報:IEventAggregatorでの起動エラーPrism
categoriesViewUriがあるprivate void NavigateToCategoriesRadioButton_Click(object sender, RoutedEventArgs e)
{
this.regionManager.RequestNavigate(RegionNames.ConfigurationContentRegion, categoriesViewUri);
}
:
private static Uri categoriesViewUri = new Uri("/CategoriesView", UriKind.Relative);
例外がこのラインでトリガされ、キー "CategoriesView"
、Object型のインスタンスを取得しようとしたときに、アクティベーションエラーが発生しました
これは私のビューモデルクラスです:
[Export]
public class CategoriesViewModel : BindableBase
{
private readonly IRegionManager regionManager;
private readonly IEventAggregator eventAggregator;
private readonly IConfigurationCategoriesService categoriesService;
private readonly ObservableCollection<Category> categoriesCollection;
private readonly ICollectionView categoriesView;
private readonly DelegateCommand<object> deleteCategoryCommand;
[ImportingConstructor]
public CategoriesViewModel(IEventAggregator eventAggregator, IConfigurationCategoriesService categoriesService, IRegionManager regionManager)
{
this.categoriesService = categoriesService;
this.regionManager = regionManager;
this.eventAggregator = eventAggregator;
this.deleteCategoryCommand = new DelegateCommand<object>(this.DeleteCategory, this.CanDeleteCategory);
this.categoriesCollection = new ObservableCollection<Category>(categoriesService.GetCategories());
this.categoriesView = new ListCollectionView(this.categoriesCollection);
this.categoriesView.CurrentChanged += (s, e) => this.deleteCategoryCommand.RaiseCanExecuteChanged();
}
public ICollectionView Categories
{
get { return this.categoriesView; }
}
public ICommand DeleteCategoryCommand
{
get { return this.deleteCategoryCommand; }
}
private void DeleteCategory(object ignored)
{
var category = this.categoriesView.CurrentItem as Category;
if (category != null)
{
categoriesService.DeleteCategory(category);
}
}
private bool CanDeleteCategory(object ignored)
{
return true;
}
}
CatagoriesViewModelはコンストラクタでIEventAggregatorのインスタンスを取得できないようですが、これはPrismによって自動的に行われますか?私がPrism Documentation(StockTraderRI_Desktop)から持っている例では、EventAggregatorがインスタンス化されているところはどこにもありません。私は何が悪くなっているのか誰にでも見えますか?事前に感謝
Editted:
NavitagionアイテムビューがCategoriesModuleクラスでregisterdさ:
[ModuleExport(typeof(CategoriesModule))]
public class CategoriesModule : IModule
{
[Import]
public IRegionManager regionManager;
public void Initialize()
{
this.regionManager.RegisterViewWithRegion(RegionNames.ConfigurationNavigationRegion, typeof(CategoriesNavigationItemView));
}
}
そしてCategoriesViewコードビハインドがある:
[Export("CategoriesView")]
public partial class CategoriesView : UserControl
{
public CategoriesView()
{
InitializeComponent();
}
[Import]
public IRegionManager regionManager;
[Import]
public CategoriesViewModel ViewModel
{
get { return this.DataContext as CategoriesViewModel; }
set { this.DataContext = value; }
}
}
内部の例外の詳細は何ですか? BTW - パラメータを持たないデリゲートコマンドもあります。ここでは未使用のオブジェクトは必要ありません。 – Haukinger
問題が 'IEventAggregator'にあることをどう知っていますか?それはエラーメッセージに由来するものではなく、私はそれをインポートする際に問題が発生したことはありません。おそらく、IConfigurationCategoriesServiceの輸出がないということです。また、エラーは 'CategoriesView'ではなく' CategoriesViewModel'に関係しているので、問題がそこにあることをどのように知っていますか? – Grx70
こんにちは@ Grx70。私はCategoriesViewModelのコンストラクタからIEventAggregatorを削除するとうまく動作するので問題がそこにあると言います。 – chincheta73