System.Data.Services.Client.DataServiceContext
에서 파생되는 특정 종류의 클래스를 검색하기 위해 제네릭 메서드를 만들 필요가 있습니다.이 문제를 처리하는 방법이 있지만 지금까지는 고생하고 있습니다. 일반적인 공통 분모의 개념은이 개념이이 경우에 적용됩니까? 이처럼 내 현재 코드는 모습입니다 : 당신이 볼 수 있듯이, 내가 선택적 매개 변수와 T를 인스턴스화 할 수있는 방법은 없습니다여러 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;
}
}
, 그것은 그러나 내가 해결할 수있는 방법을 찾아 싶다 "cannot provide parameters when creating an instance of a type parameter 'T'
"라고
GetContext<MyContext1>().Table1.Where(x=>x.Id == 1);
GetContext<MyContext2>().Table2.FirstOrDefault();
어떤 도움 작동 : URI가, T
의 유형에 따라 oDataContext를 만드는 데 필요한 것을 나의 예상되는 경우는 다음과 같이 될 것입니다!
무엇을 하시겠습니까? 당신이 말했듯이 제네릭 타입의 매개 변수를 가진 생성자를 사용할 방법이 없습니다. – MarcinJuraszek
"new() 제약"제한뿐만 아니라이 문제에 대한 해결 방법이있을 경우 조언을 권합니다. Lambda Expressions를 사용하여 T의 인스턴스를 만드는 방법이 있습니까? 다시, ctor에 매개 변수가 있습니까? –