在WinRT程序中使用MEF

今天试了一下在WinRT中使用MEF,这里简单的介绍一下步骤。

首先,使用NuGet安装MEF

    

然后,就可以使用MEF组装插件了,简单的示例如下:

    interface ILogger
    {
        void LogMessage(string msg);
    }

    [Export(typeof(ILogger))]
    class Logger : ILogger
    {
        public void LogMessage(string msg)
        {
            Debug.WriteLine(msg);
        }
    }


    public sealed partial class MainPage : Page
    {
        [Import]
        ILogger logger { get; set; }

        public MainPage()
        {
            this.InitializeComponent();
            Compose();

            logger.LogMessage("main page created");
        }

        private void Compose()
        {
            var configuration = new ContainerConfiguration()

                .WithAssembly(this.GetType().GetTypeInfo().Assembly);
            var compositionHost = configuration.CreateContainer();
            compositionHost.SatisfyImports(this);
        }
    }

虽然大体上和.Net中使用类似,不过一个比较明显的区别的是组装方式不同了。目前看来,只能使用SatisfyImports,而不能使用ComposeParts方法。这样就无法将成员导出了,由于这个强大的成员缺席,感觉基本上废了一半。好在WinRT程序基本上不太复杂,勉强还凑合能用。希望后续能够支持ComposeParts方法。

除此之外,WinRT下缩水的部分还不少。例如,不能再Field或property上使用Import或Export,没有InheritedExport,这些都是非常实用的功能。导致WinRT上使用的时候有些束缚非常大的感觉,希望后续能得到进一步的完善。

 

原文地址:https://www.cnblogs.com/TianFang/p/3525094.html