我们将ServiceStack用于在C#中开发的Web API。我想在Web服务启动时更改数据成员的必需属性。
目前,必需属性在编译时以这种方式定义:
[ApiMember(IsRequired=true)]
public string MyAttribute { get; set; }
我想动态地定义它的价值'执行AppHost.Configure时。
有没有办法通过ServiceStack实现这一目标?我们以相同的方式使用Fluent api定义路径(例如:Routes.Add<HOPFlight>("/flight", "POST");
)?
我阅读了答案Dynamically adding attributes in ServiceStack,建议在AppHost构造函数中执行此操作,但该怎么做?
答案 0 :(得分:3)
您链接的问题在原始问题中提供了一个示例。请注意,如果您尝试在AppHost的Configure功能中添加它,则可能为时已晚。您应该将它添加到AppHost的构造函数中。从您的链接问题,mythz说
要动态添加服务属性,您需要先添加它们 AppHost.Configure()因为它们已经被初始化了 Configure()运行,因此需要在AppHost中添加它们 构造函数或在调用AppHost.Init()之前。
在你的情况下,这样的事情应该有效,
public AppHost(string serviceName, Assembly[] serviceAssemblies) : base(serviceName, serviceAssemblies)
{
ApiMemberAttribute requiredAttribute = new ApiMemberAttribute {
IsRequired = true
}
Type[] requiredApiMembers = GetTypesToAddApiMemberAttributeTo(); //do whatever you need to get the types you want to add attributes to
foreach(requiredApiMember in requiredApiMembers)
{
requiredApiMember.AddAttributes(requiredAttribute);
}
}