0

我正在尋找一個可能的解決方案以下。Autofac。基礎類屬性解決沒有特定的注入

我有一個基類有一個依賴,我目前使用屬性注入來滿足。

public class BaseClass { 
    IService SomeService { get; set; } 
} 

我有多個類從這個基類繼承。

public class DerivedClass : BaseClass, IDerivedClass { 

} 

而且我使用以下注射。

builder.RegisterType<DerivedClass>().As<IDerivedClass>().OnActivated(e => e.Instance.SomeService = e.Context.Resolve<IService>()); 

我爲約12個擴展基類的其他類做了這個。有沒有辦法讓所有擴展BaseClass的類都能得到我的IService註冊,而不需要爲每個註冊設置一個Activation事件?它的工作正常,但只想清理註冊。

回答

1

只需使用構造函數注入。爲你的類像

public DerivedClass(IServiceOne service1, IService2 service2) 
{ 
this._service1 = service1; 
this._service2 = service2; 

} 

創建帶有參數的構造函數,使autofac自動做他的工作,像

builder.RegisterType<T>(); 
+0

我想我應該擴大。我有一個循環參考,因此OnActivated。 (循環參考是有意義的)。我想我的意思是,我希望OnActivated應用於BaseClass上的所有子類,而無需爲每個註冊編寫OnActivated。 (IService是一個Singleton,它也引用所有已註冊的IDerivedClasses)。它與OnActivated一起工作良好,只是想清理它。 – 2012-04-15 23:30:46

+0

其實我可能是錯的,但是如果你對singleton有循環依賴 - 在設計這個組件的時候出錯的可能性是99.9%。關於你的問題,如果它仍然適合你,我會在幾天後看看,現在非常忙碌 – Ph0en1x 2012-04-17 14:39:12