c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
本文介绍了按类型访问对象的C#泛型集实现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在进行一个Net Core WebApi项目,并实现工作单元模式以访问数据库中的记录。
考虑以下课程:
工作单位:
public class UnitOfWork : IUnitOfWork
{
public IBooksRepository Books { get; }
public ICatalogueRepository Catalogues { get; }
...
}
Api控制器:
public class StudentController: ApiController
{
private IUnitOfWork _unitOfWork;
public StudentController(IUnitOfWork UnitOfWork)
{
_unitOfWork = UnitOfWork;
}
public IActionResult Get()
{
var books = _unitOfWork.Books.GetAll();
return Ok(books);
}
}
}
目前我正在使用上述方法从数据库中检索记录, 我希望访问存储库对象,如下所示。var books = _unitOfWork.Set<IBooksRepository>.GetAll();
类似于EntityFrameworkDBContext类中的Set<T>
方法,其目的是使控制器类泛型并以泛型方式执行GET操作。
我如何实现像Set<T>
方法一样从UnitOfWork类中查找存储库对象?
推荐答案
我同意罗伯特·哈维的观点。但是,如果您想要这样做,一种方法是稍微重构一下代码,然后使用反射:
您可以稍微重构一下代码:
public class UnitOfWork : IUnitOfWork
{
public IRepository<Book> Books { get; }
public IRepository<Catalogue> Catalogues { get; }
public IRepository<T> Set<T>()
{
var allProperties = this.GetType().GetProperties();
var property = allProperties.SingleOrDefault(p => p.PropertyType == typeof(IRepository<T>) );
return (IRepository<T>) property.GetValue(this);
}
}
这只是一个初学者/想法,您可以更多地根据您的环境进行调整(优化、个人选项等)。
PS:您编写了类似于EF的Set<T>
";的";,但在代码示例中没有使用";实体类型";来获取存储库。您可以将我的示例进一步简化为检查T并返回T,而不是IRepository<T>
:
public T Set<T>()
{
var allProperties = this.GetType().GetProperties();
var property = allProperties.SingleOrDefault(p => p.PropertyType == typeof(T) );
return (T)property.GetValue(this);
}
然而,这似乎很愚蠢。我认为如果您要使用通用存储库&路径,则应该有IRepository<T>
。
这篇关于按类型访问对象的C#泛型集实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:按类型访问对象的C#泛型集实现


基础教程推荐
猜你喜欢
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01