C# System.ComponentModel.Composition中的Export和Import特性标签的简单使用。

微软给我们提供的强大的组件化开发框架:System.ComponentModel.Composition。我也是刚刚接触不久,下面我就班门弄斧,向大家展示下一个简单的demo。

using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Linq;
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Go go = new Go();

            //获取当前执行的程序集中所有的标有特性标签的代码段
            AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());

            //将所有Export特性标签存放进组件容器中(其实是一个数组里面)
            CompositionContainer container = new CompositionContainer(catalog);

            //找到所传入对象中所有拥有Import特性标签的属性,并在组件容器的数组中找到与这些属性匹配的Export特性标签所标注的类,然后进行实例化并给这些属性赋值。
            //简而言之,就是找到与Import对应的Export所标注的类,并用这个类的实例来给Import所标注的属性赋值,用于解耦。
            container.ComposeParts(go);

            if (go.test!=null)
            {
                go.test.show();
            }
            Console.ReadLine();
        }
    }

    //定义一个测试接口
    interface ITest {
        void show();

    }

    //Export出去的类型和名称都要和Import标注的属性匹配,类型可以写ITest, 也可以写Test
    [Export("wakaka",typeof(ITest))]
    class Test : ITest
    {
        public void show()
        {
            Console.WriteLine("OK");
        }
    }

    class Go
    {
        [Import("wakaka")]
        public ITest test { get; set; }
    }
}

代码执行效果截图:



其实这个东西类似于IOC,其实就是一个解耦的功能,我们如想使用其他人写的ITest的实现类,只需要更改下程序集就可以轻松做到,当然前提是其他人写的实现类上的Export特性标签的匹配信息要与我们Import的属性的信息匹配。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值