2013-07-15 4 views
0

Я использую Ninject 2 на определенный период и обновился до Ninject 3, чтобы лучше поддерживать SignalR и другие фреймворки.Ninject Interceptor custom PlanningStrategy не работает в Ninject 3

Код, используемый для работы нормально.

public class AttributeDrivenPlanningStrategy<TAttribute, TInterceptor> : NinjectComponent, IPlanningStrategy 
     where TAttribute : Attribute 
     where TInterceptor : IInterceptor 
    { 
     private readonly IAdviceFactory adviceFactory; 
     private readonly IAdviceRegistry adviceRegistry; 

     public AttributeDrivenPlanningStrategy(IAdviceFactory adviceFactory, IAdviceRegistry adviceRegistry) 
     { 
      this.adviceFactory = adviceFactory; 
      this.adviceRegistry = adviceRegistry; 
     } 

     public void Execute(IPlan plan) 
     { 
      var methods = GetCandidateMethods(plan.Type); 
      foreach (var method in methods) 
      { 
       if(!method.HasAttribute<TAttribute>()) 
       { continue; } 

       var advice = adviceFactory.Create(method); 
       advice.Callback = request => request.Kernel.Get<TInterceptor>(); 
       adviceRegistry.Register(advice); 

       if (!plan.Has<ProxyDirective>()) 
       { plan.Add(new ProxyDirective()); } 
      } 
     } 


     private static IEnumerable<MethodInfo> GetCandidateMethods(Type type) 
     { 
      const BindingFlags methodFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; 
      var methods = type.GetMethods(methodFlags); 
      return methods.Where(ShouldIntercept); 
     } 

     private static bool ShouldIntercept(MethodInfo methodInfo) 
     { 
      return methodInfo.DeclaringType != typeof (object) && 
        !methodInfo.IsPrivate && 
        !methodInfo.IsFinal; 
     } 
    } 

Однако теперь взрывает говорит, что он не может найти IAdviceFactory в Ninject переплетов, так уже есть какие-либо критические изменения в последней версии перехватчика, так как есть рядом нет документации по этому расширению (что Я нахожу странным, учитывая количество AoP, плавающего в эти дни).

Так может ли кто-нибудь указать мне в сторону где-нибудь, что скажет мне, в чем проблема?

ответ

0

Это было связано с тем, что у меня не было пакета dynamicproxy nuget для установленного перехватчика, поскольку пакет nuget для ninject.interception не содержит другие библиотеки, поскольку вы можете выбирать между прокси-серверами linfu и на основе замка.