C# MEF和MVVM—添加约定的方法?

C# MEF和MVVM—添加约定的方法?,c#,.net,mvvm,dependency-injection,mef,C#,.net,Mvvm,Dependency Injection,Mef,有没有办法钩住CompositionContainer的内部 例如,假设在对以“View”结尾的导出调用导入时,我可能希望将以“ViewModel”结尾的导出注入到其DataContext中 有办法吗?我试图在每个视图中避免这样的代码: [Export("MainView")] public partial class MainView : Window { [ImportingConstructor] public MainView([I

有没有办法钩住CompositionContainer的内部

例如,假设在对以“View”结尾的导出调用导入时,我可能希望将以“ViewModel”结尾的导出注入到其DataContext中

有办法吗?我试图在每个视图中避免这样的代码:

    [Export("MainView")]
    public partial class MainView : Window
    {
        [ImportingConstructor]
        public MainView([Import("MainViewModel")] dynamic viewModel)
        {
            InitializeComponent();

            DataContext = viewModel;
        }
    }
最好简化为这一点,并使用约定:

        [Export("MainView")]
        public partial class MainView : Window
        {
            public MainView()
            {
                InitializeComponent();
            }
        }

有一些人在做这件事,显然包括Mef团队:) 以下是一篇您可能会感兴趣的博客文章:

下面是另一个稍微不太详细的例子:


我想您正在寻找一个可以减少工作量的库或框架


请看一下图书馆。我用得很好。

到目前为止,我想到的最好办法是使用一个IViewLocator服务来完成这项工作,然后总是使用它来导入视图。