我为IUrlHelper创建了扩展方法。
public static class UrlHelperExtensions
{
public static string JavaScript(this IUrlHelper helper, string contentPath, IOptions<TypeScriptOptions> tsOptions)
{
if (tsOptions.Value != null && tsOptions.Value.Minify)
{
contentPath = Path.ChangeExtension(contentPath, ".min.js");
}
return helper.Content(contentPath);
}
public static string Css(this IUrlHelper helper, string contentPath, IOptions<LessOptions> lessOptions)
{
if (lessOptions.Value != null && lessOptions.Value.Minify)
{
contentPath = Path.ChangeExtension(contentPath, ".min.css");
}
return helper.Content(contentPath);
}
}
我想将IOptions<TypeScriptOptions> tsOptions
和IOptions<LessOptions> lessOptions
传递给使用.NET Core依赖注入的方法。
在Razor视图中,我有以下内容:
@inject IOptions<CssOptions> lessOptions
<link href="@Url.Css("~/css/site.css", lessOptions)" rel="stylesheet" asp-append-version="true">
但我只想做:
<link href="@Url.Css("~/css/site.css")" rel="stylesheet" asp-append-version="true">
我已经尝试过查看.NET核心文档,并且我已经完成了一些谷歌搜索,但我似乎无法找到一种方法来实现我想要的东西,而无需借助Tag Helpers不是我想做的事。
我怎样才能让它发挥作用?
答案 0 :(得分:2)
正如@Romoku所说,扩展方法是静态方法,只将state作为参数(或来自静态)。
您需要继续使用您拥有的策略,并将其作为参数传递。或者放弃扩展方法的想法并创建一些通过DI解决的辅助类或服务:
public class UrlHelperService
{
private IOptions<CssOptions> _cssOptions;
private IOptions<JavaScriptOptions> _jsOptions;
private IUrlHelper _urlHelper;
public UrlHelperService(
IOptions<CssOptions> cssOptions,
IOptions<JavaScriptOptions> jsOptions,
IUrlHelper urlHelper)
{
_cssOptions = cssOptions;
_jsOptions = jsOptions;
_urlHelper = urlHelper;
}
public string JavaScript(string contentPath)
{
if (_jsOptions.Value != null && _jsOptions.Value.Minify)
{
contentPath = Path.ChangeExtension(contentPath, ".min.js");
}
return _urlHelper.Content(contentPath);
}
public string Css(string contentPath)
{
if (_cssOptions.Value != null && _cssOptions.Value.Minify)
{
contentPath = Path.ChangeExtension(contentPath, ".min.css");
}
return _urlHelper.Content(contentPath);
}
}
容器需要注册此类,例如:
services.AddScoped<UrlHelperService>()
或者这种类型的生命周期。
该服务将在您的视图中注入,而不是options
实例:
@inject UrlHelperService urlHelperService
<link href="@urlHelperService.Css("~/css/site.css")" rel="stylesheet" asp-append-version="true">