#c#
#c#
Вопрос:
Я создал плагин и пытаюсь использовать его в классе, проблема в том, что метод, который я пытаюсь использовать в этом классе, является статическим методом.
Структура реализации плагина такова:
Проблема заключается в вызываемом методе TestMethod
в TestClass
классе. Я не могу использовать атрибут TestPlugin
, потому что он не является статическим свойством.
Я пытался использовать его как статический, но когда я изменяю это TestPlugin
свойство, оно становится null
. По этой причине я пытался найти способ использовать его как обычное свойство, но после долгих поисков я не смог найти способ сделать это.
Код выглядит следующим образом:
TestPlugin
объявление:
[ImportMany]
public IEnumerable<ITestPlugin> TestPlugin{ get; private set;}
Использование TestPlugin
атрибута:
private static void TestMethod(){
...
// Here Visual Studio says that :
//An object reference is required for the nonstatic field, method, or property 'ToastPlugin'
foreach(plugin in TestPlugin){
//Plugin's use
}
...
}
Редактировать:
Есть ли способ использовать TestPlugin
inside of TestMethod
без объявления TestPlugin
как static по причинам, указанным ранее?
Комментарии:
1. В чем ваш вопрос?
2. Если бы у вас было два разных экземпляра
TestClass
, один с двумя плагинами и один с одним плагином, что бы вы ожидалиTestMethod
сделать? (Я бы также назвалTestPlugin
его свойством, а не атрибутом —ImportMany
это пример атрибута здесь, в терминологии C #.)
Ответ №1:
Есть ли способ использовать TestPlugin внутри TestMethod без объявления TestPlugin как static по причинам, указанным ранее?
Быстрый ответ — нет.
В основном у вас есть следующие варианты:
TestPlugin
Также сделайте статический.- Сделайте
TestMethod
так, чтобы он не был статичным. - Make
TestMethod
принимает ссылку наTestClass
объект в качестве параметра. - Добавьте статическую коллекцию
IList<IEnumerable<ITestPlugin>>
и вget
/set
методыTestPlugin
добавления / удаления класса из этой новой коллекции.
Какой из этих четырех вы бы выбрали, зависит от того, чего именно вы пытаетесь достичь.