Es realmente muy simple; tanto Nlog y log4net esperan que utiliza simples referencias/estáticos para obtener instancias logger:
private static Logger logger = LogManager.GetCurrentClassLogger();
Esto es ampliamente considerado como un anti-patrón, pero incluso si usted no tiene ningún problema con él, que todavía va en contra de la grano si está tratando de implementar la inyección de dependencia. En el caso de NLog, ni siquiera es una interfaz ILog
o ILogger
como log4net, es una clase real. Eso conlleva ciertos inconvenientes tales como la incapacidad para crear proxies, carga diferida, el almacenamiento en caché, etc.
Lo que el proyecto no es Ninject.Extensions.Logging primera proporcionar una clase abstracta ILogger
con métodos simples como Info
, Error
, etc., por lo que se puede inyectar como una dependencia y cambiar el marco de registro si desea:
public class WidgetProvider
{
private readonly ILogger log;
public WidgetProvider(ILogger log)
{
this.log = log;
}
}
Esta es la forma en que se supone que trabajar DI - una clase nunca se va a agarrar sus propias dependencias, sino que están suministrados por el constructor o el que llama como se indica arriba. Suponiendo que ya ha integrado Ninject en su proyecto, eso es realmente todo que tiene que hacer, no hay trabajo adicional.
En cuanto a lo que Ninject.Extensions.Logging.NLog2 hace específicamente - solo proporciona una implementación para Ninject.Extensions.Logging basado en NLog2. La biblioteca de registro base en realidad no contiene ninguna implementación de ILogger
, debe conectar una de las bibliotecas específicas (NLog, NLog2 o log4net) para que funcione.
Si cambia su biblioteca DI con más frecuencia de la que conmuta los registradores, entonces no se moleste con ella. Pero si eres como yo y usas Ninject en casi todos los proyectos, entonces es una buena forma de desacoplar tu código de cualquier biblioteca de registro específica.
Parece que algunas personas lo usan incluso aquí: http://groups.google.com/group/ninject/search?group=ninject&q=nlog&qt_g=Search+this+group –
@Taesung Shin - Bueno, teniendo en cuenta la El mensaje más nuevo tiene más de un año de antigüedad y Ninject, MVC y varios proyectos han crecido significativamente en ese tiempo ... Estoy buscando información más reciente. –