Я пытаюсь создать эффективный интерфейс, который я использую для некоторых плагинов. Я думал, что нашел достойный интерфейс, но попытка его реализовать не будет хорошо. Поэтому я надеялся увидеть, есть ли у кого-нибудь предложения по поводу того, как это можно сделать. Она ошибка вне с «не содержит публичное определение„GetEnumerator“»Дизайн интерфейса и эффективность сравнения двух списков <string>
Plugin интерфейс:
namespace ALeRT.PluginFramework
{
public interface IQueryPlugin
{
string PluginCategory { get; }
string Name { get; }
string Version { get; }
string Author { get; }
System.Collections.Generic.List TypesAccepted { get; }
}
interface IQueryPluginRBool : IQueryPlugin
{
bool Result(string input, bool sensitive);
}
interface IQueryPluginRString : IQueryPlugin
{
string Result(string input, bool sensitive);
}
}
В сущности, я пытаюсь взять список типов, которые должны быть использованы (типов могли URL, имя, адрес электронной почты, IP и т. д.) и сравнить их со значением в плагине запросов. Каждый плагин запроса может иметь несколько типов, которые он принимает. Когда они совпадают, он выполняет действия, которые находятся в плагине запросов.
[ImportMany]
public IEnumerable<IQueryPlugin> QPlugins { get; set; }
private void QueryPlugins(List<string> val, bool sensitive)
{
foreach (string tType in val) //Cycle through a List<string>
{
foreach (var qPlugins in this.QPlugins) //Cycle through all query plugins
{
foreach (string qType in qPlugins) //Cycle though a List<string> within the IQueryPlugin interface AcceptedTypes
{
if (qType == tType) //Match the two List<strings>, one is the AcceptedTypes and the other is the one returned from ITypeQuery
{
//Do stuff here
}
}
}
}
}
Что такое this.QPlugins? Не могли бы вы показать весь код, на который ссылается метод QPlugins? –
Ahh извините, что добавлено в [ImportMany] во второй части кода. – lordzero
Вы читали мой ответ ниже? –