2013-10-08 130 views
0

在我的MVC Web應用程序中,我有一個Tech.UI圖層,其中包含所有與用戶界面相關的組件。Define ImageResizer設置運行時

我想使用ImageResizer在我的web應用程序中生成縮略圖。我看到了應該在web.config文件中設置的配置。

由於在不構建Tech.UI項目的情況下不會更改設置,是否有定義web.config文件之外的所有配置?我應該如何定義運行時或靜態硬編碼的設置?

這裏是我的示例web.config文件:

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="resizer" type="ImageResizer.ResizerSection,ImageResizer" requirePermission="false" /> 
     </configSections> 
     <appSettings> 
     <add key="webpages:Version" value="2.0.0.0" /> 
     <add key="webpages:Enabled" value="false" /> 
     <add key="PreserveLoginUrl" value="true" /> 
     <add key="ClientValidationEnabled" value="true" /> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
     </appSettings> 
     <system.web> 
     <httpRuntime targetFramework="4.5" /> 
     <compilation debug="true" targetFramework="4.5" /> 
     <pages> 
      <namespaces> 
      <add namespace="System.Web.Helpers" /> 
      <add namespace="System.Web.Mvc" /> 
      <add namespace="System.Web.Mvc.Ajax" /> 
      <add namespace="System.Web.Mvc.Html" /> 
      <add namespace="System.Web.Routing" /> 
      <add namespace="System.Web.WebPages" /> 
      </namespaces> 
     </pages> 
     <httpModules> 
      <add name="ImageResizingModule" type="ImageResizer.InterceptModule" /> 
     </httpModules> 
     </system.web> 
     <system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <modules> 
      <add name="ImageResizingModule" type="ImageResizer.InterceptModule" /> 
     </modules> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
     <security> 
      <requestFiltering allowDoubleEscaping="true" /> 
     </security> 
     </system.webServer> 
     <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
     </runtime> 
     <resizer> 
     <remotereader signingKey="blahblahblah" allowAllSignedRequests="false" allowRedirects="5"> 
      <allow domain="*" /> 
     </remotereader> 
     <diskCache dir="~/img/t" autoClean="false" hashModifiedDate="true" enabled="true" subfolders="32" cacheAccessTimeout="15000" asyncWrites="false" asyncBufferSize="10485760" /> 
     <pipeline fakeExtensions=".ashx" /> 
     <plugins> 
      <add name="MvcRoutingShim" /> 
      <add name="DiskCache" /> 
      <add name="RemoteReader" /> 
      <add name="SeamCarving" /> 
     </plugins> 
     </resizer> 
    </configuration> 

回答

2

有幾種不同的方式來做到這一點:

  1. 外部化使用configSource web.config文件的一部分。

  2. 使用Config.Current.setConfigXmlText(xml)替換XML配置。

  3. 通過代碼new Plugin(settings).Install(Config.Current)安裝所有插件,直接配置實例。確保沒有衝突的XML設置,因爲這些設置可能會被加載。

  4. 執行ICurrentConfigProvider作爲插件來控制基於當前HTTP請求(或缺少一個)使用哪個Config實例。如果你想完全替換主實例,這是如何。所有撥打Config.Current的電話都被委託給第一個響應的ICurrentConfigProvider插件。

  5. 請勿使用Config.Current。創建並管理您自己的ImageResizer.Configuration.Config的實例。請注意,一些插件不能爲每個應用程序(DiskCache)或進程(Faces,RedEye,PdfRenderer)提供多個實例。