Tengo una aplicación .NET que proporciona un mecanismo para extender la aplicación con complementos. Cada complemento debe implementar una interfaz de complemento y debe proporcionar además un constructor que reciba un parámetro (un contexto de recursos).¿Puede una interfaz definir la firma de un constructor de C#
Durante la creación de instancias de la clase de complemento, miro por reflexión, si el constructor necesario existe y, en caso afirmativo, creo una instancia de la clase (a través de Reflection). Si el constructor no existe, arrojo una excepción que dice que no se pudo crear el complemento porque el constructor deseado no está disponible.
Mi pregunta es, si hay una manera de declarar la firma de un constructor en la interfaz del plugin para que todos los que implementan la interfaz del plugin también deben proporcionar un constructor con la firma deseada. Esto facilitaría la creación de complementos.
No creo que existe esa posibilidad, porque creo que esta característica no cae en el objetivo principal para lo que fue diseñada para las interfaces, pero tal vez alguien sabe una declaración que hace esto, algo como:
public interface IPlugin {
ctor(IResourceContext resourceContext);
int AnotherPluginFunction();
}
Quiero agregar que no quiero cambiar el constructor para que no tenga parámetros y luego establecer el recurso-contexto a través de una propiedad, porque esto hará que la creación de complementos sea mucho más complicada. Las personas que escriben complementos no son personas con una profunda experiencia en programación. Los complementos se usan para calcular datos estadísticos que la aplicación visualizará.
Gracias por todas las respuestas.
He decidido que dejo que sea una interfaz porque no me gusta forzar a los programadores-complementos a heredar de una clase abstracta para que pierda la posibilidad de heredar de una clase base propia . Además, derivar de una clase abstracta no garantiza que el programador de complementos realmente proporcione el constructor necesario. Lo hace solo más probable (El programador todavía tiene la posibilidad de agregar solo un constructor que contenga el parámetro deseado pero que también tenga parámetros adicionales, y eso también es malo. Vea los comentarios a la respuesta de Ken Browning).
Aunque mencioné en mi publicación que no quiero esa propiedad, marqué la respuesta de Danny Varod como aceptada porque creo que en mi situación es la solución más adecuada. Gracias a todos los que respondieron.
+1 por usar una propiedad. –