none
Не подключаются плагины динамически при использовании MEF RRS feed

  • Вопрос

  • Здравствуйте. Подскажите пожалуйста такую вещь. Пытаюсь сделать тестовое приложение которое бы динамически подгружало dll. Но он их почему то не подгружает. Делаю как бы два проекта. В одном само приложение которое подгружает dll . А в другом у меня делается эта самая dll. Делаю вот так. Это основное приложение.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    using System.ComponentModel.Composition.Hosting;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfMef
    {
        /// <summary>
        /// Логика взаимодействия для MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void attachPluginClick(object sender, RoutedEventArgs e)
            {
                DirectoryCatalog catalog = new DirectoryCatalog(@"D:\plugins");
                
                var container = new CompositionContainer(catalog);
                //var container = new CompositionContainer();
                container.ComposeParts(this);
                //container.ComposeParts(this, new FirstPlugin(), new SecondPlugin());
                test();
                
            }
    
            [ImportMany(typeof(IPlugin))]
            IEnumerable<Lazy<IPlugin>> plugin;
            
            private void test()
            {
                foreach (Lazy<IPlugin> t in plugin)
                {
                   string f = t.Value.Title;
                   int s = t.Value.Summa(3, 5);
                }
            }
       
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WpfMef
    {
        public interface IPlugin
        {
            string Title { get; }
            int Summa(int a, int b);
        }
    }
    

    Дальше код второго проекта , в нем как раз и делается dll

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WpfMef
    {
        public class ModerPlug : IPlugin
        {
            public string Title
            {
                get { return "third plugin mega!!!"; }
            }
    
            public int Summa(int a, int b)
            {
                return a + b*100;
            }
        }
    }
    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WpfMef
    {
        public interface IPlugin
        {
            string Title { get; }
            int Summa(int a, int b);
        }
    }
    

    Дальше я кидаю получившуюся dll в папку с плагинами. И ничего он не видит почему то. В чем может быть дело??

    7 марта 2014 г. 12:12

Ответы

Все ответы

  • так почему не видит разобрался , забыл поставить атрибут [Export(typeof(IPlugin))] перед классом и еще у длл нэймспейс такой же сделал как у основной программы. Но теперь с эксепшеном валиться Не удается преобразовать тип "WpfMef.ModerPlug (ContractName="WpfMef.IPlugin")" базового экспортированного значения в тип "WpfMef.IPlugin". Там же вроде один и тот же интерфейс используется?? Почему он тогда валится??
    • Изменено Timur2008 7 марта 2014 г. 15:07
    7 марта 2014 г. 12:47
  • аа сделал:) интерфейсы в отдельную дллку закинул и просто добавлял к проектам и к основному приложению и к плагинам)) тогда и с нэймспейсами ненужно ничего мудрить:)
    7 марта 2014 г. 16:08