2016-11-20 7 views
0

私は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; } 
    } 
} 
+0

内部の例外の詳細は何ですか? BTW - パラメータを持たないデリゲートコマンドもあります。ここでは未使用のオブジェクトは必要ありません。 – Haukinger

+0

問題が 'IEventAggregator'にあることをどう知っていますか?それはエラーメッセージに由来するものではなく、私はそれをインポートする際に問題が発生したことはありません。おそらく、IConfigurationCategoriesServiceの輸出がないということです。また、エラーは 'CategoriesView'ではなく' CategoriesViewModel'に関係しているので、問題がそこにあることをどのように知っていますか? – Grx70

+0

こんにちは@ Grx70。私はCategoriesViewModelのコンストラクタからIEventAggregatorを削除するとうまく動作するので問題がそこにあると言います。 – chincheta73

答えて

0

私は追加するこの問題を解決しました次の使用ステートメント:

using Microsoft.Practices.Prism.PubSubEvents; 
代わりに、私もこのサイトに勧告でユニティ代わりのMEFに切り替え

using Prism.Events; 

関連する問題