0

我正在使用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是派生所有实体的基类形式。但是在运行时,我传递了更具体的服务和实体,例如SoleServiceand Sole。我想要完成的是以某种方式声明运行时类型serviceentity从整个方法中可见的那些属性。在这里说清楚是我现在要做的:

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

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

4

1 回答 1

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

可以改写为

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

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

因此,您的所有逻辑都将使用 BaseService 和 IBaseService 的方法。

于 2013-03-26T09:41:48.937 回答