我有必要創建一個泛型方法來檢索從System.Data.Services.Client.DataServiceContext
派生的特定種類,我有一些想法如何處理這個,但到目前爲止我卡在通用協方差的概念,這個概念是否適用於這種情況呢?這是我當前的代碼看起來像:爲多個DataContext創建泛型方法的想法
public abstract class BaseODataProvider<T> where T : DataServiceContext, new()
{
public IApiSettings ApiSettings { get; set; }
public BaseODataProvider(IApiSettings ApiSettings = null)
{
this.ApiSettings = ApiSettings ?? new DefaultApiSettings();
}
public T GetContext()
{
var context = new T(new Uri(ApiSettings.ODataUrl));
context.IgnoreMissingProperties = true;
context.IgnoreResourceNotFoundException = true;
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(ApiSettings.LoginName + ":" + ApiSettings.Password));
context.SendingRequest +=
(object s, SendingRequestEventArgs e) =>
e.RequestHeaders.Add("Authorization", "Basic " + credentials);
return context;
}
}
正如你所看到的,有沒有辦法,我可以使用可選參數實例T,它說:「cannot provide parameters when creating an instance of a type parameter 'T'
」,但是我想找出一種方法來解決所需要的URI來創建一個基於T
類型的oDataContext,所以我預計情況會是這樣的:
GetContext<MyContext1>().Table1.Where(x=>x.Id == 1);
GetContext<MyContext2>().Table2.FirstOrDefault();
任何幫助的作品!
您希望我們做什麼?正如你所說的,沒有辦法使用帶有泛型類型參數的構造函數。 – MarcinJuraszek
我想你們建議如果有這個問題的解決方法,不僅對於「new()約束」的限制,有沒有辦法使用Lambda表達式創建T的實例?再次,參數在ctor? –