c# -将泛型方法的传递类型向上转换
本文关键字:类型 转换 泛型方法 | 更新日期: 2023-09-27 18:06:05
我使用ADO.NET EF
和Repository pattern
。我想要分离一些逻辑,这些逻辑对于我的一些实体是通用的,我决定最好的方法是使用泛型方法。这是我的方法的声明:
internal static void ChangeCode<T>(IService<T> service, Entity entity, MaskedTextBox txtBox, string newCode, long? entityId)
where T : Common.DbContextEntities.Entity
IService<T>
是所有业务派生的基类,Entity
是所有实体派生的基类形式。然而,在运行时,我传递更具体的服务和实体,如SoleService
和Sole
。我想要完成的是以某种方式声明service
和entity
到运行时类型以及从整个方法中可见的那些属性。下面是我现在所做的:
if (entity.GetType() == typeof(Sole))
{
Sole tempEntity = new Sole();
ISoleService tempService = UnityDependencyResolver.Instance.GetService<ISoleService>();
问题是,我只能在if (entity.GetType() == typeof(Sole))
的范围内使用tempEntity
和tempService
,如果我必须检查几种类型(事实上就是这种情况),我必须重复每个不同类型的所有业务逻辑。我正在寻找一种方法来设置tempEntity
和tempService
在运行时特定的方式,他们可以在方法中的任何地方使用。
Sole tempEntity = new Sole();
ISoleService tempService = UnityDependencyResolver.Instance.GetService<ISoleService>();
可以用
重写BaseService tempEnitity = (BaseService)Activator.CreateInstance(entity.GetType());
IBaseService tempService = tempEnitity.GetServiceInterface();
其中BaseService是所有服务(SoleService等)的父类,包含返回所有服务接口(ISoleService等)的父类IBaseService的虚方法。
所以,你所有的逻辑都将与BaseService和IBaseService的方法一起工作