c# -将泛型方法的传递类型向上转换

本文关键字:类型 转换 泛型方法 | 更新日期: 2023-09-27 18:06:05

我使用ADO.NET EFRepository 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是所有实体派生的基类形式。然而,在运行时,我传递更具体的服务和实体,如SoleServiceSole。我想要完成的是以某种方式声明serviceentity到运行时类型以及从整个方法中可见的那些属性。下面是我现在所做的:

if (entity.GetType() == typeof(Sole))
            {
                Sole tempEntity = new Sole();
                ISoleService tempService = UnityDependencyResolver.Instance.GetService<ISoleService>();

问题是,我只能在if (entity.GetType() == typeof(Sole))的范围内使用tempEntitytempService,如果我必须检查几种类型(事实上就是这种情况),我必须重复每个不同类型的所有业务逻辑。我正在寻找一种方法来设置tempEntitytempService在运行时特定的方式,他们可以在方法中的任何地方使用。

c# -将泛型方法的传递类型向上转换

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的方法一起工作