3

我在 .NET 4.5 中找不到 System.ComponentModel.Composition.Initialization.dll(其中包含 CompositionInitializer 类的声明)。此程序集是否已从 .NET 4.5 中的 MEF 中删除?我现在如何编写标有 [Export] 和 [Import] 属性的应用程序的各个部分?

假设我有这个观点:

    internal partial class StartWindow : Window
    {
        public StartWindow()
        {
            InitializeComponent();
            DataContext = ViewModel;
        }

        [Import]
        public IStartWindowViewModel ViewModel { get; set; }
    }

和适当的 ViewModel:

    [Export]
    internal class StartWindowViewModel : IStartWindowViewModel
    {
        public IEnumerable<Customer> Customers { get; set; }
    }

我应该在我的外壳(或其他地方)中添加什么来组成这些部分?

4

2 回答 2

5

Silverlight 中存在这些CompositionInitializer和类似的类,但不存在完整的 .NET Framework。MEF 团队故意决定将他们排除在外,因为他们认为他们不合适。

逻辑是应该使用构造注入。

话虽如此,在 Silverlight 中应用类以使用该类的逻辑在 WPF 中应用完全相同。我在 .NET 4 中对此进行了博文,并包含了一个适用于整个框架的实现。

于 2013-01-31T19:21:40.467 回答
1

你失去了初始化组合,fe

    _container = new CompositionContainer(catalog);

    //Fill the imports of this object
    try
    {
        this._container.ComposeParts(this);
    }
    catch (CompositionException compositionException)
    {
        Console.WriteLine(compositionException.ToString());
    }

微软

于 2013-01-31T19:28:51.800 回答