2012-04-12 8 views
0

Ich versuche durch AOP hinzufügen Anmeldung in einer ASP.NET MVC Anwendung:
Logging mit EntLib Politik Injection Block + StructureMap + log4net

  • Enterprise Library Politik Injection Anwendung blockieren

  • StructureMap
  • log4net

Dies ist, was Ich habe:

web.config

<configSections> 
    <section name="policyInjection" type="Microsoft.Practices.EnterpriseLibrary.PolicyInjection.Configuration.PolicyInjectionSettings, Microsoft.Practices.EnterpriseLibrary.PolicyInjection, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    </configSections> 

    <policyInjection> 
    <policies> 
     <add name="Policy"> 
     <matchingRules> 
      <add type="Microsoft.Practices.EnterpriseLibrary.PolicyInjection.MatchingRules.TagAttributeMatchingRule, Microsoft.Practices.EnterpriseLibrary.PolicyInjection, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      match="Log" name="Tag Attribute Matching Rule" /> 
     </matchingRules> 
     <handlers> 
      <add type="MyApp.Website.MyLoggingCallHandler, MyApp.Website, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
      name="Custom Handler" /> 
     </handlers> 
     </add> 
    </policies> 
    </policyInjection> 

Bootstrapper:

ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory()); 

StructureMapControllerFactory:

public class StructureMapControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
    var instance = ObjectFactory.GetInstance(controllerType); 
    return PolicyInjection.Wrap<IController>(instance); 
    } 
} 

Controller:

[Tag("Log")] 
public class HomeController : Controller 
{ 
    //Implementation 
} 
MyLoggingCallHandler 0

:

namespace MyApp.Website 
{ 
    [ConfigurationElementType(typeof(CustomCallHandlerData))] 
    public class MyLoggingCallHandler : ICallHandler 
    { 
     public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) 
     { 
      //Implementation 
     } 

     public int Order { get; set; } 
    } 
} 

Die Frage ist: der Call Handler wird ausgelöst, nie.
Was mache ich falsch?

Antwort