IOC容器之MEF

MEF的核心包括一个catalog和CompositionContainer。category用于发现扩展,而container用于协调创建和梳理依赖性。每个组合的Part提供了一个或多个Export,并且通常依赖于一个或多个外部提供的服务或Import。每个Part管理一个实例为应用程序运行。

MEF提供三种方式发现部件:

① AssemblyCatalog 在当前程序集发现部件。

② DirectoryCatalog 在指定的目录发现部件。

③ DeploymentCatalog 在指定的XAP文件中发现部件。

因为历史原因,MEF有两个版本。一个是Framwork的System.ComponentModel.Composition。

一个是Nuget包的(这个支持.Net Core) System.Composition

下面来演示一个.Net Core使用MEF容器

using System;
using System.Collections.Generic;
using System.Composition;
using System.Composition.Convention;
using System.Composition.Hosting;
using OldModel;
using NewModel;

namespace NewMEF
{
    class Program
    {
        static void Main(string[] args)
        {
            var conventions = new ConventionBuilder();
            conventions.ForTypesDerivedFrom<IDog>().Export<IDog>().Shared();

            var assemblies = new[] { typeof(IDog).Assembly };
            var configuration = new ContainerConfiguration().WithAssemblies(assemblies, conventions);

            using (var container = configuration.CreateContainer())
            {
                var plugins = container.GetExports<IDog>();
                foreach (var item in plugins)
                {
                    Console.WriteLine("Name:{0}",item.Name);
                }
            }
            Console.ReadKey();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Composition;

namespace OldModel
{
    public interface IDog
    {
      string Name { get; }
    }

    [Export(typeof(IDog))]
    public class FatDog : IDog
    {
        public string Name => "肥狗!";
    }
    
    [Export(typeof(IDog))]
    public class StupidDog:IDog
    {
      string IDog.Name { get => "蠢狗"; }
    }
    

}

猜你喜欢

转载自www.cnblogs.com/luoluoluoD/p/10937358.html
今日推荐