ioccontainer文件:

 

 public class ioccontainer
    {
        /// <summary>
        /// 容器
        /// </summary>
        public static compositioncontainer container { get; private set; }

        private static ioccontainer instance = new ioccontainer();

        private ioccontainer()
        {
            if (container == null)
            {
                try
                {
                    //获取包含当前执行的代码的程序集
                    //var path1 = appdomain.currentdomain.basedirectory + "\\bin"; //另一种写法
                    string codebase = assembly.getexecutingassembly().codebase;
                    uribuilder uri = new uribuilder(codebase);
                    string path = uri.unescapedatastring(uri.path);
                    path = path.getdirectoryname(path);

                    //创建一个程序集目录,用于从一个程序集获取所有的组件定义
                    var catalog = new directorycatalog(path, "wip_bll.dll");
                    //创建容器
                    container = new compositioncontainer(catalog);
                    //_container.composeparts(this); //将部件(part)和宿主程序添加到组合容器,此时会初始化除了懒加载之外的import的对象,
                    //执行组合 【组合这一行代码,并不影响我们的使用,有没有皆可】
                    container.composeparts();
                }
                catch (exception ex)
                {//吞掉异常
                    loghelper.writeerrorlogbylog4net(typeof(ioccontainer), "注册mef出错:ex:" + jsonconvert.serializeobject(ex));
                }
            }
        }

        /// <summary>
        /// 注册
        /// </summary>
        /// <returns></returns>
        public static ioccontainer registercontainer()
        {
            return instance;
        }

    }

global.asax:

 

使用:

   datareportview ret = ioccontainer.container.getexport<idayreportdatabll>("dayreportdata").value.getdayreportdata(storedatetime, storedate);