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