Bir Konsol uygulamasında Log4Net kullanıyorum ve Ana yöntemde kaydedici nesnesini alıyorum. Şimdi, tüm sınıfları, tüm sınıfların bir ILog özelliğine sahip olan ve Constructor Injection'dan ziyade Property Injection tarafından ayarlanması gereken bir BaseClass'dan miras almasına izin vererek bu sınıf nesnesini bütün sınıflarımda kullanılabilir hale getirmek istiyorum.AutoFac ile Mülkiyet Enjeksiyonu Nasıl Kullanılır?
AutoFac IoC kapsayıcısı kullanıyorum, günlük Nesnemi her sınıfımın Log özelliğine nasıl enjekte edebilirim?
Bunu başarmanın en iyi/en kolay yolu nedir?
Türleri otomatik olarak çözmenin bir yolu var mı?
namespace ConsoleApplication1
{
class Program
{
static ILog Log;
static IContainer Container;
static void Main(string[] args)
{
InitializeLogger();
InitializeAutoFac();
// the below works but could it be done automatically (without specifying the name of each class)?
Product.Log = Container.Resolve<ILog>();
// tried below but didn't inject ILog object into the Product
Container.Resolve<Product>();
RunTest();
Console.ReadLine();
}
private static void RunTest()
{
var product = new Product();
product.Do();
}
private static void InitializeAutoFac()
{
var builder = new ContainerBuilder();
builder.Register(c => Log).As<ILog>();
builder.RegisterType<Product>().PropertiesAutowired();
Container = builder.Build();
}
private static void InitializeLogger()
{
log4net.Config.XmlConfigurator.Configure();
Log = LogManager.GetLogger("LoggerName");
}
}
public class Product
{
public static ILog Log { get; set; }
public void Do()
{
// this throws exception because Log is not set
Log.Debug("some Debug");
}
}
}
. Bu şekilde, her bir kaydedici otomatik olarak tanımlandığı sınıfın ismine sahip olacaktır. – alex
'Product' –
'da 'static' ilog'undan çıkarmayı deneyin. Örnek olmakla çalıştım ama yardımcı olmadım. –