我有一个相当小的网站,我正在处理,我已经达到了一个点,我需要将我的绝对路径到我的html中的相对路径。我为我的IoC使用了AutoFac,并且我构建了一个包装器,用于在我的项目中注入我的web.config应用程序设置,并使用此位运行到墙上:使用IoC框架,我需要从注入类获取值到扩展方法
我有一个名为“ContentServerPath”的配置值,包装需要照顾转嫁:
public interface IConfigurationWrapper
{
string ContentServerPath { get; }
}
和我的实现(非常简单):
public ConfigurationWrapper()
: this(ConfigurationManager.AppSettings, ConfigurationManager.ConnectionStrings)
{
}
internal ConfigurationWrapper(NameValueCollection appSettings, ConnectionStringSettingsCollection connectionStrings)
{
ContentServerPath = appSettings["ContentServerPath"];
}
我_layout.cshtml页面已初步编码为使用本地样式和jQuery,而网站是开发:
<link rel="stylesheet" type="text/css" href="~/assets/styles/site.css" />
最终输出我希望做的是沿着线的东西来代替HTML行:
<link rel="stylesheet" type="text/css" href="@Html.GetContentPath("assets/styles/site.css")" />
然而,它证明是一个可怕的任务,因为这样的事实,当我调用扩展方法,我不能将IConfigurationWrapper注入静态类。
我最初的想法是沿
public static MvcHtmlString GetContentPath(this HtmlHelper htmlHelper, string relativeContentPath)
{
return string.Format("{0}/{1}", _configuration.ContentServerPath, relativeContentPath);
}
线的东西,但同样,我不能注入配置包装成静态方法。
作为一个方面说明,我把内容路径放入web.config的原因是因为我们有几个不同的测试环境,每个环境都需要它自己的内容配置值。我们依靠xdt转换为我们的构建服务器在部署代码和相应地修改配置之前选择任何更改。
任何人遇到过这样的事情,并有一个很好的解决方案?提前致谢!
你应该使用AutofacDependencyResolver设置标准MVC DependencyResolver然后只是DependencyResolver.Current而不是直接访问应用程序容器。尽可能避免将组件直接从容器中分离出来是最佳做法。 –