0
如何傳遞,注入或實例化一個對象的一個或多個實例,並只引用它的接口?如何在方法調用中傳遞或注入未知數量的對象
我不確定如果我正確地問這個,這是我的簡單的僞代碼問題。
在這個例子中,這是一個數據層,可以訪問對包含公共接口的項目的引用,但不能訪問具體的實現。我想傳入(或注入)將返回一個或多個提供者對象集合的List。
問題是,我無法爲存儲過程返回的集合中的每條記錄實例化一個IProvider
項目的新實例,因爲我只參考了IProvider
接口。
DI會解決這個問題嗎?我仍然不知道有多少個Provider
項目要傳入,如果有的話在我調用這個方法的時候。
我有一種感覺,這是一個模式問題比什麼都重要,但我無法圍繞正確的解決方案包裹我的頭。
public List<IProvider> GetProviders(List<IProvider> providers, IProvider provider)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Providers.usp_GetProviders";
SQLDatabase db = new SQLDatabase();
using(cmd.Connection = db.GetConnection())
{
cmd.Connection.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
// Internal private method called for each row
// needs a new instance of an IProvider
MapDbToEntity(rdr, provider);
providers.Add(provider);
}
}
return providers;
}
你將傳遞類的實例繼承來自IProvider並提供實現 –
@EhsanSajjad是的,但我不知道我需要多少提供程序,我需要爲記錄集中的每一行創建一個新實例。完成這一模式正在逃避我。 – Richard
爲了更加清晰,方法調用顯示了IProvider提供程序的參數 - 這可能不正確,但不知道如何在此方法內部解決此問題,我無法根據需要在此新建提供程序,然後填充並添加到集合中。 – Richard