2012-05-10 8 views
0

サイトスコープ機能のフィーチャーレシーバーでイベントハンドラーを使用すると、自分の設定にHttpHandlerを追加しています(私はこれを初めて使っているので、コードはちょっとばかり離れています。新しいHttpModuleのInit()メソッドはいつ呼び出されますか?

public override void FeatureActivated(SPFeatureReceiverProperties properties) { 
    var site = (SPSite)properties.Feature.Parent; 
    var webApp = site.WebApplication; 
    if (!webApp.IsAdministrationWebApplication) { 
     var modification = new SPWebConfigModification("add[@name='SharePointNinjectHttpModule']", "configuration/system.web/httpModules"); 
     modification.Owner = "addSharePointNinjectHttpModule"; 
     modification.Sequence = 0; 
     modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode; 
     modification.Value = @"<add name=""SharePointNinjectHttpModule"" type=""Foo.Bar.SharePointNinjectHttpModule,Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=****************"" />"; 
     webApp.WebConfigModifications.Add(modification); 
     try { 
      webApp.WebService.ApplyWebConfigModifications(); 
      webApp.Update(); 
     } 
     catch (SecurityException e) { 
      // todo ApplyWebConfigModifications throws "Access Denied" SecurityException when activating via Site Settings 
     } 
    } 
} 

public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { 
    var site = (SPSite)properties.Feature.Parent; 
    var webApp = site.WebApplication; 
    if (!webApp.IsAdministrationWebApplication) { 
     var oCollection = webApp.WebConfigModifications; 
     var iStartCount = oCollection.Count; 
     for (int c = iStartCount - 1; c >= 0; c--) { 
      SPWebConfigModification oModification = oCollection[c]; 
      if (oModification.Owner == "addSharePointNinjectHttpModule") { 
       oCollection.Remove(oModification); 
      } 
     } 

     if (iStartCount > oCollection.Count) { 
      try { 
       webApp.WebService.ApplyWebConfigModifications(); 
       webApp.Update(); 
      } 
      catch (SecurityException e) { 
       // todo ApplyWebConfigModifications throws "Access Denied" SecurityException when deactivating via Site Settings 
      } 
     } 
    } 
} 

私のSharePointインスタンスのweb.configのHttpModulesセクション機能がアクティブでないとき:

<httpModules> 
</httpModules> 

そして、それがあるとき:

<httpModules> 
    <add name="SharePointNinjectHttpModule" type="Foo.Bar.SharePointNinjectHttpModule,Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=****************" /> 
</httpModules> 

だからは機能受信機のようなですイベントハンドラーは仕事をしています(多分私は何か不足していますか?)。ここ

とHttpModuleをです:

using System; 
using System.Web; 
using Foo.Bar.Models; 
using Ninject; 

namespace Foo.Bar { 
    public class SharePointNinjectHttpModule : IHttpModule { 
     public void Init(HttpApplication context) { 
      if (Kernel == null) { 
       Kernel = new StandardKernel(); 
       Kernel.Bind<IRepository>().To<Repository>(); 
      } 
     } 

     public static IKernel Kernel { get; private set; } 

     public void Dispose() {} 

     private static IKernel GetKernel() { 
      IKernel result = new StandardKernel(); 
      result.Bind<IRepository>().To<Repository>(); 
      return result; 
     } 

    } 
} 

私のHttpModuleをのinit()メソッドが発火することはありません。 になるはずですが、それは起こると思っていますが、なぜそれは起こっていませんか?私は私のweb.configファイルの間違ったセクションにモジュールを注入した

var modification = new SPWebConfigModification("add[@name='SharePointNinjectHttpModule']", "configuration/system.webServer/modules"); 

答えて

0

FeatureActivated(を次のように変更)は、私が持っていた問題を解決しました。

オリジナル:設定/のsystem.web /のHttpModules
変更:設定/ system.webServer /モジュール

私は上記の変更を行ったら、私が正しく追加された後は、私が正しくHttpModuleを

を追加してhttpModule、私のInit()はすぐに起動しました。

関連する問題