我的API路由属性类如下所示
public class MyRouteAttribute : RouteAttribute
{
private const string BaseRoute = "api/default";
private const string PrefixRouteBase = BaseRoute + "/";
public MyRouteAttribute() : base(BaseRoute)
{
}
public MyRouteAttribute(string route):
base(string.IsNullOrEmpty(route) ?
BaseRoute : PrefixRouteBase + route)
{
}
}
它被用于控制器中,如
[MyRoute]
public class MyController : Controller
{
.....
}
如果必须使路由可配置,如何将IOptions
传递给MyRoute?
例如,如果我这样做:
public class MyRouteAttribute : RouteAttribute
{
private const string BaseRoute = "api/default";
public MyRouteAttribute(IOptions<ApiRouteBaseConfiguration> routeOptions) :
base(routeOptions.Value.Url)
{
}
public MyRouteAttribute(IOptions<ApiRouteBaseConfiguration> routeOptions, string route):
base(string.IsNullOrEmpty(route) ? (routeOptions.Value.Url: $"{routeOptions.Value.Url}/" + route)
{
}
}
然后我在这里出错了,[MyRoute]
要求我传递IOptions
。
如何访问MyRoute属性中的配置
发布于 2018-04-09 22:26:33
当从反射例程请求属性时,属性实例由CLR进行are created。您无法通过任何DI容器强制实例化属性。
我看到两种可能的方法来解决你的挑战。这两种方法都允许您拥有可配置的属性,但是配置不是通过属性构造函数设置的。
"Routing"
):
公共无效ConfigureServices(IServiceCollection服务){ services.AddMvc();Configuration.Bind(“路由”,MyRouteAttribute.RouteConfiguration);}
因为静态属性的使用,这个解决方案并不完美。然而,这是相当简单的,应该能做到这一点。IApplicationModelProvider
的自定义实现中设置它。这种方法是在this answer中描述的,我不会重复这里的代码。https://stackoverflow.com/questions/49741119
复制相似问题