Given ta klasa:Korzystanie LogManager.GetLogger z Jedności
class Foo
{
readonly ILog log;
public Foo(ILog log)
{
this.log = log;
}
...
}
Chciałbym skonfigurować Jedności wstrzyknąć Ilog. To proste:
container.RegisterInstance<ILog>(LogManager.GetLogger(typeof(XYZ)));
Ale chciałbym, aby wezwanie Unity LogManager.GetLogger
z rodzajem dominującego typu rozwiązania.
To jest blisko:
container.RegisterType<ILog>(new InjectionFactory((c, t, s) => LogManager.GetLogger(t)));
t
Ale w tym przypadku jest typem jest rozwiązany (ILog
), nie jest typem, że obiekt jest rozwiązany za (Foo
).
wiem, że mogę to zrobić:
container.RegisterType<Foo>(new InjectionFactory(c => new Foo(LogManager.GetLogger(typeof(Foo)));
Ale ja nie chcę dodać, że szalony każdą deklarację czas zarejestrować obiekt.
Wiem, że można to zrobić w Autofac i wiem, że Prawdziwa Odpowiedź nie ma w pierwszym rzędzie używać Jedności, ale czy można to zrobić? :)
dzięki, Skończyłem z czymś opartym na tym samym modelu. Jedną z rzeczy, którą odkryłem, było to, że musiałem wdrożyć IRecovery, aby obsłużyć przypadki, w których PostBuildUp nie został wywołany. –
_PostBuildUp_ z _TrackingStrategy_ nie został wywołany? O ile mi wiadomo, jest to możliwe tylko wtedy, gdy strategia ogłosi kompilację jako kompletną w _PreBuildUp_ (której nie ma) lub jeśli w rurociągu znajduje się wyjątek, który przedwcześnie przerywa połączenie. –
To prawda. Nie jestem pewien, czy były wyjątki, ale mamy pewne [Opcjonalne zależności], które mogą nie być możliwe do załadowania, więc nie ma nic do * PostBuildUp *. –