我正在尝试减少现有MVC 4 Web API 2应用程序中的重复代码。我们使用AutoMapper将实体映射到自定义DataObjects。我们有一个现有的数据库,其中包含多个与特定产品相关的“标签”表(比如说自行车,沙发和桌子)。
我有一个通用控制器:
public class TagController<TTagDataObject> : ApiController where TTagDataObject : ITagDataObject
{
private readonly ITagService<TTagDataObject> _service;
public TagController(ITagService<TTagDataObject> service)
{
_service = service;
}
[HttpPost]
public HttpResponseMessage Post(TTagDataObject model)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ModelState);
}
// Make service call
model = _service.CreateTag(model);
return Request.CreateResponse(HttpStatusCode.Created, model);
}
... Other Methods
}
应用程序正在使用Repository Pattern,我在创建服务时遇到了麻烦,因为我需要按实体类型定义Repository,而我只知道DataObject类型。
我可以使用AutoMapper的GetAllTypeMaps()
System.Type t = Mapper.GetAllTypeMaps().FirstOrDefault(i=> i.SourceType == typeof(TTagDataObject)).DestinationType;
如何定义和使用存储库?我想做点什么:
Repository<t> repository = new Repository<t>();
但我得到“找不到类型或名称空间''......”
我可以使用Activator CreateInstance方法定义存储库,如下所示:Pass An Instantiated System.Type as a Type Parameter for a Generic Class
var repository = Activator.CreateInstance(t);
但是除非我使用反射或动态,否则我无法访问存储库方法。似乎应该有一个更简单的解决方案,并且我可能会以错误的方式解决这个问题。
非常感谢。