我需要重構現有的抽象類來實現依賴注入,但是這個類有兩個構造函數接受其他參數。構造函數注入,避免非依賴參數
public abstract class MyClassBase
{
MyClassBase(int settingId)
{
_settingId = settingId;
}
MyClassBase(Setting setting)
{
_setting = setting;
}
...
}
我需要注入一些接口,並避免在構造函數中傳遞任何其他參數,如「settingId」和「Setting」。 所以我的想法是創建兩個方法來設置這些參數,一旦我們創建了這個類的實例。
public abstract class MyClassBase
{
private readonly IOneService _oneService;
private readonly ITwoService _twoService;
MyClassBase(IOneService oneService, ITwoService twoService)
{
_oneService = oneService;
_twoService = twoService;
}
protected void SetupSetting(int settingId)
{
_settingId = settingId;
}
protected void SetupSetting(Setting setting)
{
_setting = setting;
}
protected Setting Setting
{
get
{
if(_setting == null)
{
_setting = _oneService.getSettingById(_settingId);
}
return _setting;
}
}
}
但它看起來並不作爲一個妥善的解決辦法,因爲如果開發商忘了執行這些方法只是在創建實例後,我們可以得到一個異常一個(對象未設置爲引用...)的未來。 我應該如何正確地做到這一點?
您的設置方法不正確,它不會返回任何內容。 –