Pliki DLL MEF i ShadowCopying, dzięki czemu mogę je zastąpić w czasie wykonywania

Próbuję zatrzymać moje zablokowane biblioteki aplikacji w katalogu wtyczek MEF, dzięki czemu mogę nadpisać zespoły w czasie wykonywania (zauważ, że faktycznie nie próbuję załadować MEF w locie, przy następnym uruchomieniu aplikacji jest dobrze, po prostu nie chcę zatrzymywać aplikacji, aby wykonać kopię)

Próbuję to zrobić, tworząc domenę aplikacji skopiowaną w tle dla moich załadowanych zestawów, jak poniżej:

[Serializable]
    public class Composer:IComposer
    {
        private readonly string _pluginPath;
        public Composer(IConfigurePluginDirectory pluginDirectoryConfig)
        {
            _pluginPath = pluginDirectoryConfig.Path;
            var setup = new AppDomainSetup();
            setup.ShadowCopyFiles = "true"; // really??? is bool not good enough for you?
            var appDomain = AppDomain.CreateDomain(AppDomain.CurrentDomain.FriendlyName + "_PluginDomain", AppDomain.CurrentDomain.Evidence, setup);

            appDomain.DoCallBack(new CrossAppDomainDelegate(DoWorkInShadowCopiedDomain));      
        }

        private void DoWorkInShadowCopiedDomain()
        {
            // This work will happen in the shadow copied AppDomain.

            var catalog = new AggregateCatalog();
            var dc = new DirectoryCatalog(_pluginPath);
            catalog.Catalogs.Add(dc);
            Container = new CompositionContainer(catalog);
        }

        public CompositionContainer Container { get; private set; }
    }

a następnie uzyskaj dostęp do mojego katalogu komponentów MEF za pomocą CompositionContainer w tej klasie. Wydaje się jednak, że kontener kompozycji jest inicjowany tylko w domenie shadowcopy (co ma sens), a to oznacza, że ​​jego null w mojej domenie aplikacji. Zastanawiałem się tylko, czy istnieje lepszy sposób na wykonanie tego lub jakiegoś sposobu krzyżowania zapytań domenowych, aby uzyskać komponenty MEF

questionAnswers(3)

yourAnswerToTheQuestion