Me preguntaba cuáles eran algunas de las mejores prácticas en torno a los marcos de registro y registro y la inyección de dependencias. Específicamente, si estoy diseñando una clase que necesita una forma de iniciar sesión, ¿cómo debo conseguir una interfaz para iniciar sesión y mantener en mente la inyección de dependencia?interfaces de inyección e inicio de sesión de dependencia
La inyección de dependencias parece indicar que las dependencias externas deben ser inyectadas desde el exterior (constructor o establecedores de propiedades), entonces ¿debería tomar una instancia de ILog en el constructor y usarla en la clase? ¿Debo considerar registrar una dependencia opcional y obtenerla en un setter? ¿Estoy presionando para que haya demasiada flexibilidad al permitir que la interfaz de registro cambie y debería tomar una dependencia estricta de una interfaz de registro específica (por ejemplo, crear una variable de ILog estática mediante una llamada a un método de fábrica)? ¿Podría este método de fábrica llamar al contenedor para obtener la implementación ILog o creará conflictos de inicialización entre las variables estáticas que se están inicializando y el contenedor IoC que se está inicializando?
debería hacer esto:
public class MyService : ISomeService
{
private static readonly ILogger s_log =
LoggingFactory.GetLogger(typeof(MyService))
...
}
o tal vez esto:
public class MyService : ISomeService
{
protected virtual ILogger Logger {get; private set;}
public MyService(ILogger logger, [other dependencies])
{
Logger = logger;
}
}
o incluso esto:
public class MyService : ISomeService
{
public virtual ILogger Logger {get; set;}
public MyService()
{
}
}
Otros patrones o formas de hacer esto? ¿Qué están haciendo allí las personas? ¿Qué funciona y cuándo?
Optaría por la segunda o tercera opción dependiendo de si tener o no un registrador para el servicio se considera crítico. – toad