Определить интерфейс для загрузки пользовательских UserControls через отражение - PullRequest
3 голосов
/ 18 мая 2010

Я загружаю пользовательские элементы управления в форму, используя отражение. Я хотел бы, чтобы все мои пользовательские элементы управления имели методы «Пуск» и «Конец», поэтому все они должны выглядеть так:

public interface IStartEnd
{
    void Start();
    void End();
}

public class AnotherControl : UserControl, IStartEnd
{            
    public void Start()
    { }

    public void End()
    { }
}

Я бы хотел, чтобы интерфейс загружался через отражение, но следующее, очевидно, не будет работать, поскольку интерфейс не может наследовать класс:

public interface IMyUserControls : UserControl, IInit, IDispose
{

}

Ответы [ 3 ]

1 голос
/ 18 мая 2010

Я не вижу варианта использования, загрузка пользовательских элементов управления через отражение требует знания имени типа элемента управления. Либо используйте Assembly.CreateInstance, если вы динамически загружали сборку самостоятельно, либо используйте полное имя типа с Activator.CreateInstance, чтобы CLR мог определить, какую сборку необходимо загрузить.

Если вы хотите избежать указания имени типа пользовательского элемента управления, вы можете выполнить итерацию загруженной сборки с помощью Assembly.GetTypes () и найти тип, реализующий ваш интерфейс. Это будет хорошо работать, только если вы каким-то образом сможете гарантировать, что сборка содержит только один элемент управления.

0 голосов
/ 18 мая 2010

Похоже, то, что вы пытаетесь сделать, очень похоже на подход, используемый Prism (и блоком составного приложения). Прочитайте следующие статьи, чтобы дать вам представление о том, что с ними связано:

Существует множество примеров, и этот шаблон очень широко используется.

Надеюсь, это поможет.

B

0 голосов
/ 18 мая 2010

Вы можете применить ограничение во время выполнения, чтобы класс, реализующий IMyUserControls : IInit, IDispose, также is UserControl. Разумно предположить, что разработчики, предоставляющие настраиваемые элементы управления для вашего приложения, знают требования к элементам управления, поэтому я не вижу проблем с выполнением проверки во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...