鑑於以下接口:C#調用泛型方法動態
interface IEntity
{
int Id{get;}
}
interface IPerson : IEntity
{
string Name{get;}
int Age{get;}
}
interface ITeacher : IPerson
{
string StaffId{get;}
}
interface IStudent : IPerson
{
string StudentId{get;}
string Courses{get;}
}
interface IRepository
{
T Get<T>(int id) where T : IEntity
}
我在命名空間
public class EntityBase() : IEntity
{
int Id{get;set;}
}
public class Teacher : EntityBase, ITeacher{}
public class Sudent : EntityBase, IStudent{}
目前我實現這個IRepository下列類別如下:
class Repository: IRepository
{
IDataContext Context{get;set;}
T Get<T>(int id) where T : EntityBase
{
if(typeof(T) == typeof(Teacher))
return Context.Get<ITeacher>(id);
if(typeof(T) == typeof(Sudent))
return Context.Get<ISudent>(id);
throw new Exception("Unknown Interface " + typeof(T).Name);
}
}
有沒有更好的實施方式?鑑於我們的上下文不瞭解我們的數據類型(教師,學生),只知道它的接口(ITeacher,IStudent)。
可以這樣的工作?
class Repository: IRepository
{
T Get<T>(int id) where T : EntityBase
{
var MyInterface = FindInterface<T>();
return Context.Get<MyInterface>(id);
}
}
這是這樣你就可以調用'Repository.Get(ID)',而不是'Repository.Get (ID)'?何必? –
Gabe
2010-09-30 20:03:23
是的。所以我也可以調用repository.Save(teacher)而不是repository。保存(老師) –
2010-10-01 14:02:41
我仍然從未在實際項目中使用過依賴注入......但是從我讀過的內容看來,您感覺就像是重新實現了DI框架。 – Domenic 2010-10-06 06:10:28