Serilog bir bağlam duyarlı kayıt cihazı oluşturmasına olanak sağlar tüketici Log.ForContext
Log.ForContext<T>()
T
olduğu böyle bir şekilde SimpleInjector ile Serilog kaydetmek istiyorum Tüketici türü, yani hangi sınıf için enjekte edilir.
örn.
public class Car
{
public Car(ILogger logger) <= would be injected using Log.ForContext<Car>()
{
}
}
Bu has been done with AutoFac'u görebiliyorum.
Ve SimpleInjector documentation'u inceleyerek, RegisterConditional()
(Func<TypeFactoryContext, Type>
parametresiyle) çok fazla gelecek vaat ediyor.
c.RegisterConditional(typeof (ILogger),
x => Log.ForContext(x.Consumer.ImplementationType), <= won't compile as expecting a Type
Lifestyle.Scoped,
x => true);
ancak, inşa etmek hangi Tip SimpleInjector anlatmak istemiyorum, ama nasıl birini inşa etmek.
"RegisterConditional" yöntemiyle bir temsilci kaydettirin; çünkü bu, nesne grafiği oluşturma sırasında çalışma zamanı kararları vermenize izin verir ve Basit Enjektörün nesne grafikleri üzerinde derin bir analiz yapmasına izin vermez. Yani buradaki hile, "Log.ForContext" çağrısını kendi tanımlanmış bir jenerik sınıfa sarmaktır, ki bu tam olarak @janhartmann önerileridir. Serilog'u kendi soyutlamanızın ardında saklayıp saklamayacağınız size kalmış, ancak bunu kesinlikle tavsiye ediyorum. Benim için Jan'ın cevabı * doğru cevap. –
Steven
Ayrıca, çok fazla oturum açmadığınızdan emin olun: https://stackoverflow.com/a/9915056/264697 – Steven