To naprawdę bardzo proste; zarówno NLog i log4net oczekiwać, aby używać singleton/referencje statycznych do uzyskania instancji Rejestrator:
private static Logger logger = LogManager.GetCurrentClassLogger();
ten jest powszechnie uważany za anty-wzór, ale nawet jeśli nie masz z tym problem, to nadal będzie przeciw ziarno, jeśli próbujesz wdrożyć wtrysk zależności. W przypadku NLog nie jest to nawet interfejs ILog
lub ILogger
, taki jak log4net, to rzeczywista klasa. Które niesie pewne wady, takie jak niemożność stworzenia proxy, odroczone obciążenia, buforowanie itp
Co projekt Ninject.Extensions.Logging nie jest pierwszym dostarczyć streszczenie ILogger
klasy z prostych metod, takich jak Info
, Error
itp więc można wstrzyknąć go jako zależność i przełączyć ram rejestrowania, jeśli chcesz:
public class WidgetProvider
{
private readonly ILogger log;
public WidgetProvider(ILogger log)
{
this.log = log;
}
}
ten sposób DI ma pracować - klasa nigdy nie wychodzi chwycić własne zależności, a nie są one dostarczane przez konstruktor lub dzwoniący jak wyżej. Zakładając, że już zintegrowałeś program Ninject ze swoim projektem, to naprawdę musisz zrobić, to nie ma dodatkowej pracy.
Jeśli chodzi o to, co Ninject.Extensions.Logging.NLog2 ma , konkretnie - zapewnia jedynie implementację Ninject.Extensions.Logging na podstawie NLog2. Podstawowa biblioteka Logging w rzeczywistości nie zawiera żadnych implementacji ILogger
, musisz podłączyć jedną z konkretnych bibliotek (NLog, NLog2 lub log4net), aby uruchomić ją.
Jeśli zmienisz bibliotekę DI częściej niż przełączasz rejestratory, nie przejmuj się tym. Ale jeśli jesteś podobny do mnie i używaj programu Ninject w prawie każdym projekcie, to jest to dobry sposób na oddzielenie kodu od dowolnej biblioteki logowania.
Wydaje kilka osób go używać nawet w tutaj: http://groups.google.com/group/ninject/search?group=ninject&q=nlog&qt_g=Search+this+group –
@Taesung Shin - Cóż, biorąc pod uwagę najnowsza wiadomość ma ponad rok, a projekty Ninject, MVC i różne znacznie wzrosły w tym czasie ... Szukam bardziej aktualnych informacji. –