我定义了一个方法 public void Add<T>(T model) where T : class;
用的时候是这样:
Add<News>(new News(){
nTitle=“2018”
});
Add<Email>(new Email(){
eTitle=“2018”
});
不同的类要写很多代码,工厂模式也要判断类,能否通过一个字符串,就能创建这个Add<T>(T model)里面的那个T和参数model?
你可以直接定义一个扩展类,里面就你需要的类的Add方法
举个例子:
声明一个泛型接口
public interface Ibase_service<T> where T : new()
{
bool Insert(T entity);
}
继承:
public class complaint_service : Ibase_service<complaint>
{
return dal.Insert(null, null, entity);
}
dal里面的泛型接口:
public interface Ibase_dao<T> where T : new()
{
bool Insert(SqlConnection conn, SqlTransaction trans, T entity);
}
dal里面的方法继承和实现:
public partial class complaint_dao : Ibase_dao<complaint>
{
bool Ibase_dao<complaint>.Insert(SqlConnection conn, SqlTransaction trans, complaint model)
{
SqlParameter[] parameters;
string strSql = string.Empty;
BuildPara(model, out strSql, out parameters, true);
return Insert(conn, trans, strSql.ToString(), parameters);
}
}
我发现每次都要传入这个类型吗?? bool Ibase_dao<complaint>.Insert(SqlConnection conn, SqlTransaction trans, complaint model),能否继承一个类,就可以直接保存了。或者别的。
@YnioBa: 在上面的例子泛型就是实体类型,complaint只是一个例子、再比如User、Role等,对外的话调用的地方都是继承这个接口,调用Insert方法,传入对应的实体就行了。
@幻丿辰: 我现在用反射解决了,但是代码比较丑。其实业务是这样的,我们之前都是datatable,传入一个表名就可以查询数据了,现在变成改了orm之后,要传入一个对象,动态的生成对象,并调用里面的泛型。这个时候,就比较麻烦了。
@YnioBa: 好吧,反正解决方案有多种,能解决问题就行。