我試圖註冊幾個與Windsor容器共享相同接口ISetting
的類型。Windsor基於通用接口的組件註冊
說明性:ISetting
接口不需要任何實現。它的唯一目的是幫助定位組件中的設置類型。否則,這些設置類型不會以任何方式,形狀或形式相互關聯。
通常我會創建這些類型的一個接一個與沿着這些線路代碼:
var settingsManager = new SettingsManager();
var applicationSettings = settingsManager.LoadSettings<ApplicationSettings>();
var emailSettings = settingsManager.LoadSettings<EmailSettings>();
但我想按照慣例註冊這些組件,所以我沒有做手工。
到目前爲止,我已經在WindsorInstallers之一下面的代碼:
container.Register(Classes.FromAssemblyContaining<ISetting>()
.BasedOn<ISetting>()
...help...
);
澄清:設置會以班級爲具體類型內使用(見下文)
public class Service2
{
private readonly EmailSettings _settings;
public Service2(EmailSettings settings)
{
_settings = settings;
}
public void Awesome()
{
Console.WriteLine(_settings.Value);
}
}
我的目標:儘管我可以逐個將所有設置類型注入容器,但我正在尋找一種解決方案,可以找到並註冊從繼承的所有類型使用一個(也許兩個)語句。
謝謝你的迴應。我在原始問題中做了一些澄清,以更好地描述需要什麼。 – Valera
方式3 :)應該工作,使用頂部的註冊。那麼任何需要具體類型的組件都會被注入。請注意,設置僅被註冊一次。 – dbones
方式3將註冊所有具體的「ISetting」實現 - 這是真的。但我需要通過'settingsManager.LoadSettings()其中T:ISetting'來運行每個類。這聽起來像我應該利用UsingFactoryMethod來配置每個組件,但我無法提供確切的語法。 –
Valera