2012-05-10 5 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 
      } 
     } 
    } 
} 

내 셰어 인스턴스의 web.config HttpModules는 섹션 기능이 활성화되지 않은 경우 :

<httpModules> 
</httpModules> 

을 그리고 그것은 때 : 그래서

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

그것은 이 기능 수신기처럼 보인다 이벤트 핸들러가 일을하고있다 (어쩌면 내가 뭔가를 놓친거야?).

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을의 초기화() 메소드는 결코 발사하지 :

그리고 여기이 HttpModule을합니다. 일 때 나는 그것을 발사하기를 기대하며, 왜 그런 일이 일어나지 않을까요?

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

내 Web.config의 잘못된 부분에 모듈을 주입 하였다

답변

0

FeatureActivated에 다음과 같은 변화는() 문제를 내가 가졌다 해결.

품 : 설정/system.web/HttpModules는
변경 : 설정 /의 system.webServer/모듈

I는 상기 변경 한 후에 I 올바르게 첨가 한 후, I ​​올바르게 httpModule이

첨가 하였다 httpModule, 내 Init() 즉시 해고.

관련 문제