Estoy trabajando en una aplicación de monitoreo del sistema similar a Nagios en C#. Tengo una interfaz de complemento definida como:C# plugin arquitectura pregunta
public interface IPlugin
{
PluginResult Execute();
}
Cada complemento, dependiendo de su funcionalidad, tendrá un número variable de argumentos. Como ejemplo, un complemento ping puede tomar un nombre de host, # de paquetes, valor de tiempo de espera, etc. Quiero que el usuario pueda definir estos argumentos por servicio en mi interfaz de usuario, pero obviamente estos argumentos no se conocerán hasta que el la aplicación descubre qué complementos están disponibles. Tengo curiosidad sobre cómo otros podrían diseñar un complemento de modo que la aplicación pueda descubrir estos argumentos variables.
En este momento, como un ejemplo, tengo un plugin de ping:
public class PingPlugin : IPlugin
{
private const string RESULT_MESSAGE = "Average ms: {0}; Packet loss: {1}";
private string _hostname;
private int _packets;
private int _timeout;
private int _warningTimeThreshold;
private int _warningLossThreshold;
private int _errorTimeThreshold;
private int _errorLossThreshold;
public PingPlugin(
string hostname,
int packets,
int timeout,
int warningTimeThreshold,
int warningLossThreshold,
int errorTimeThreshold,
int errorLossThreshold)
{
_hostname = hostname;
_packets = packets;
_timeout = timeout;
_warningTimeThreshold = warningTimeThreshold;
_warningLossThreshold = warningLossThreshold;
_errorTimeThreshold = errorTimeThreshold;
_errorLossThreshold = errorLossThreshold;
}
public PluginResult Execute()
{
// execute the plugin
}
}
pensé que podría ser capaz de descubrir los parámetros del constructor mediante la reflexión y presentar al usuario una cuadrícula de propiedades para permitir la configuración del complemento, pero no estoy seguro de la mejor manera de proporcionar un conjunto de valores predeterminados con este diseño. ¿Cuáles podrían ser algunas alternativas?
Voto para esto, MEF es increíble. No hay necesidad de reinventar la rueda aquí, en serio. –
¡No puedo soportar esto lo suficiente! ¿Por qué todos insisten en inventar el sistema ** TODO OTRO PLUG-IN **, incluso después de MEF? –
MEF permite el descubrimiento y la inyección, pero no responde a la pregunta fundamental, que es cómo exponer y cablear los parámetros dinámicamente al objeto del complemento. MEF no es, en sí mismo, un sistema de complementos. Todavía hay trabajo de arquitectura para decidir qué servicios deberían estar expuestos y cómo el usuario interactuará con los complementos. –