Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 58
1

Динамическое подключение класса

23.02.2016, 13:30. Показов 644. Ответов 3
Метки нет (Все метки)

Есть программа к ней есть класс требуется убрать вот эту строку
C#
1
Binarization.Transformation.BinarizationTransformation aaa = new Binarization.Transformation.BinarizationTransformation();
если ее убрать в нашем combobox(ListTransformation) пропадает класс
как сделать что бы наш AppDomain увидел наш класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
using Binarization.Transformation;
using Image.Contracts;
using Image = System.Drawing.Image;
 
 
namespace Image.Processer
{
    public partial class Shell : Form
    {
        public Shell()
        {
            InitializeComponent();
        }
      
        Binarization.Transformation.BinarizationTransformation aaa = new Binarization.Transformation.BinarizationTransformation();
 
        private void Swap_Click(object sender, EventArgs e)
        {
            OriginalAndChanges.Image = Changes.Image;
            Changes.Image = null;
        }
        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenFile = new OpenFileDialog(); //создание нового диалога
            OpenFile.Filter = "Image Files (*.BMP, *.JPG, *.PNG)|*.jpg;*.bmp;*.png"; //выставляется фильтр с форматами файлов которые будут отображены в диалоговом окне
            if (OpenFile.ShowDialog() == DialogResult.OK) //Условие: если в диалоговом окне была нажата кнопка ОК                           
            {
 
                OriginalAndChanges.SizeMode = PictureBoxSizeMode.Zoom;
                Changes.SizeMode = PictureBoxSizeMode.Zoom;
                try
                {
                    Bitmap Pic = new Bitmap(OpenFile.FileName); //создание нового битмапа (картинки) в нем OpenFile.FileName (то есть создается объект (изображение) из пути //который Вы выбрали в файл диолог)
                    OriginalAndChanges.Image = Pic; //и наконец то pictureBox1 присваивается наш Битмап
                }
                catch
                { }
            }
        }
 
        private void clearToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OriginalAndChanges.Image = null;
        }
 
        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            {
 
                Bitmap bmpSave = (Bitmap)OriginalAndChanges.Image;
                SaveFileDialog Save = new SaveFileDialog();
                Save.DefaultExt = "bmp";
                Save.Filter = "Image files (*.bmp) | *.bmp | All files(*.*) | *.* ";
                if (Save.ShowDialog() == DialogResult.OK)
                    bmpSave.Save(Save.FileName, ImageFormat.Bmp);
 
            }
        }
 
        private void Apply_Click(object sender, EventArgs e)
        {
            
 
            Changes.Image = SelectedTransformation.Apply((Bitmap)OriginalAndChanges.Image);
 
        }
 
        private void ListTransformation_SelectedIndexChanged(object sender, EventArgs e)
        {
            SelectedTransformation = GetSelectedTransformation();
            parametersPanel.Controls.Clear();
            parametersPanel.Controls.Add(SelectedTransformation.UI);
            SelectedTransformation.UI.Dock = DockStyle.Fill;
 
 
            label1.Text = SelectedTransformation.Description;
          
        }
 
        private IImageTransformation SelectedTransformation { get; set; }
 
 
        private IImageTransformation GetSelectedTransformation()
        {
            var type = ListTransformation.SelectedItem as Type;
            IImageTransformation transformation =  Activator.CreateInstance(type) as IImageTransformation;
            if (transformation == null) throw new InvalidOperationException("Cannot create instance of type: " + type.Name);
            return transformation;
        }
 
        private void TryLoadingPlugin(string path)
        {
            Assembly asm = AppDomain.CurrentDomain.Load(path);
            foreach (Type t in asm.GetTypes())
            {
                foreach (Type iface in t.GetInterfaces())
                {
                    if (iface.Equals(typeof(IImageTransformation)))
                    {
                       
                        break;
                    }
                }
            }
        }
 
        protected override void OnLoad(EventArgs e)
        {
 
            base.OnLoad(e);
            ListTransformation.DisplayMember = "Name";
           ListTransformation.Items.AddRange(
            AppDomain
                .CurrentDomain
                .GetAssemblies()
                .SelectMany(a => a.GetTypes())
                .Where(t=>t.IsClass)
                .Where(t => typeof(IImageTransformation).IsAssignableFrom(t))
                .ToArray());
        }
    }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2016, 13:30
Ответы с готовыми решениями:

Динамическое подключение библиотек
Привет всем! Подскажите, пожалуйста, возможно ли средствами C# или VB динамически загружать...

Динамическое подключение к бд
При использовании EF строка подключение находится в App.config. Каждая таблица - это экземпляр,...

Динамическое подключение стилей в коде
Стоит задача сделать для приложения (календарик) различные стили оформления (скины), почитал...

Динамическое подключение dll
Требуется динамически подключить dll. Вызвать из неё форму, а после завершения работы формы из dll...

3
Администратор
Эксперт .NET
13779 / 11166 / 4557
Регистрация: 17.03.2014
Сообщений: 22,519
Записей в блоге: 1
23.02.2016, 14:45 2
Лунев, ListTransformation заполняется типами реализуюшими IImageTransformation. Ищутся они во всех загруженных сборках. Если убрать создание экземпляра BinarizationTransformation, то сборка с этим типом не загружается. Это обычный подход .NET при работе со сборками. Они загружаются по мере необходимости когда приложению требуются типы из них. То есть очевидное решение сделать чтобы сборка с типом BinarizationTransformation загружалась. Раз не вариант с явным созданием экземпляра не подходит, то загружай сьорку динимачески. В коде уже есть метод TryLoadingPlugin.
0
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 58
23.02.2016, 15:01  [ТС] 3
Извините меня но я немного не понимаю как это сделать если не сложно то можно написать как это выглядит
если не то киньте подходящий материал
trylodingplugin
он есть но реализован не правильно
0
Администратор
Эксперт .NET
13779 / 11166 / 4557
Регистрация: 17.03.2014
Сообщений: 22,519
Записей в блоге: 1
23.02.2016, 15:30 4
Лунев, добавь в начало метода OnLoad() строку
C#
1
Assembly.Load("имя сборки с типом BinarizationTransformation");
Что касается теории, то у Рихтера это подробно описано.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2016, 15:30

Динамическое подключение Dll (c++) к WindowsAplication
Доброго времени, столкнулась с такой проблемой. Написана dll с++. Пытаюсь подключить ее к проекту...

Динамическое подключение класса
Подскажите, имеется класс, в котором для блока назначается фон, определяемый с помощью...

Динамическое подключение DLL
Здравствуйте! Скорее всего, мой вопрос покажется вам глупым, но всё же... Я не могу динамически...

dll динамическое подключение
Задача вот какая, нужно подключить длл но динамически if fileexist('mydll') then connect else ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.