C# - 向上传播到通用方法的传递类型

时间:2013-03-26 09:22:13

标签: c# generics casting

我正在使用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>();

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

1 个答案:

答案 0 :(得分:1)

Sole tempEntity = new Sole();
ISoleService tempService = UnityDependencyResolver.Instance.GetService<ISoleService>();

可以用

重写
BaseService tempEnitity = (BaseService)Activator.CreateInstance(entity.GetType());
IBaseService tempService = tempEnitity.GetServiceInterface();

其中BaseService是所有服务(SoleService等)的父服务器,containsig虚方法返回IBaseService,所有服务接口的父服务(ISoleService等)。

所以,你的所有逻辑都将使用BaseService和IBaseService的方法。