【发布时间】:2020-06-23 08:04:56
【问题描述】:
我想在创建模型时实施一些访问限制。目前我的代码看起来更像这样。
public Model GetModel()
{
Model model = new Model();
if (isAllowedToSet(Field.A))
model.FieldA = 1;
if (isAllowedToSet(Field.B))
model.FieldB = 2;
if (isAllowedToSet(Field.C))
model.FieldC = 3;
return model;
}
private bool isAllowedToSet(Field field)
{
return (field == Field.A); //Here comes some real logic
}
class Model
{
public int FieldA { get; set; }
public int FieldB { get; set; }
public int FieldC { get; set; }
}
如何更聪明地做到这一点?我正在考虑使用 FieldAttribute,但我还没有找到解决方案。还是有别的办法?
【问题讨论】:
-
如果我们了解基础知识..
private set;工作..? -
我认为您应该查看 Microsoft 文档中的以下文章:@irf 在他/她的评论中建议的stackoverflow.com/a/55470551/8293694 和docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…。
-
您能否提供有关您要解决的问题的更多信息?这看起来很笨拙。您的 GetModel() 看起来像一个工厂方法,您能否为仅填充属性子集的不同消费者提供不同的工厂?
-
@GazTheDestroyer 确定 - 这不是实际代码,只是想让事情变得简单。 GetModel 是一个服务方法,在 ApiController 中调用。它使用允许当前用户查看的值来丰富模型。这些是在数据库中检查的,因此覆盖 setter 并不是一个很好的解决方案,因为我必须混合所有应用程序层。
标签: c# .net custom-attributes