我可以在没有将约束设置为C#

问题描述

我有这个类,它是我的规范模式的一部分。 遵循此link

public class SpecificationEvaluator<TEntity> 
   where TEntity : BaseEntity

和BaseEntity仅由ID组成

例如。

public class BaseEntity
{
   public int Id { get; set; }
}

,这对于我继承了'BaseEntity'的所有实体都很好

例如。

Product : BaseEntity
Invoice : BaseEntity
Message : BaseEntity

现在我想在“用户”实体上使用规范模式,以便我可以提供规范/条件并获取用户列表。

但是我的问题是我的项目的“用户”实体没有继承“ BaseEntity”,而是继承了“ IdentityUser”

例如。

public class User : IdentityUser<int>
{
}

我知道我不能有多个类作为约束,但是我可以有多个接口。

我知道我可以将约束设置为“类”

例如。

public class SpecificationEvaluator<TEntity> 
where TEntity : class
{
}

但是这难道不会违反创建特定约束的目的吗?

问题-我是否可以实现另一个解决方案来同时具有'BaseEntity'和'User' 作为约束?

解决方法

在我看来,您可能必须这样做:

public interface IIdentityUser<T>
{
    T Id { get; set; }
}

public class SpecificationEvaluator<TEntity,T>
    where TEntity : IIdentityUser<T>
{ }

public class BaseEntity : IIdentityUser<int>
{
    public int Id { get; set; }
}

public class Product : BaseEntity { }
public class Invoice : BaseEntity { }
public class Message : BaseEntity { }

public class IdentityUser<T> : IIdentityUser<T>
{
    public T Id { get; set; }
}

public class User : IdentityUser<int>
{
}