什么是这个CompositionContainer代码在我的c# windows服务

本文关键字:我的 windows 服务 代码 CompositionContainer 什么 | 更新日期: 2023-09-27 17:51:00

我正在查看一个现有的c# windows服务项目,我有这个函数,在它的构造函数ie中调用。在win服务OnStart事件之前。有人能解释一下这是干什么用的吗?如果我把它从我的服务中删除呢?

    private void Compose()
    {
        CompositionContainer container = null;
        try
        {
            string codebase = AppDomain.CurrentDomain.BaseDirectory;
            var catalog = new DirectoryCatalog(codebase);
            container = new CompositionContainer(catalog);
            container.ComposeParts(this);
        }
        catch (CompositionException ex)
        {
            foreach (var error in ex.Errors)
            {
                _logger.Fatal("Error when loading plugin", error.Exception);
            }
        }
        catch (ReflectionTypeLoadException ex)
        {
            foreach (var error in ex.LoaderExceptions)
            {
                _logger.Fatal("Error when searching for plugin", error);
            }
        }
        catch (Exception ex)
        {
            _logger.Fatal("Error when loading plugin", ex);
        }
        finally
        {
            if (container != null)
            {
                container.Dispose();
            }
        }
    }

什么是这个CompositionContainer代码在我的c# windows服务

它的MEF就在那里(允许你按需加载插件)。更多详细信息请参见

http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.hosting.compositioncontainer (v = vs.110) . aspx

在不确定catalog中的内容的情况下,我的猜测是不应该删除此代码。CompositionContainer类是微软提供的用于创建和管理可扩展应用程序(即插件)的可扩展框架的一部分,这些可扩展应用程序将由catalog定义。如果没有这些代码,我假定服务将停止执行其定义的功能。