多年来我一直在努力想办法解决这个问题。当我试图用一个拦截器绑定我的类时,我得到了下面的异常
Kernel.Bind<MyClass>().ToSelf().Intercept().With<ILoggerAspect>();加载组件IAdviceFactory时出错。没有在内核的组件容器中注册这样的组件
我尝试过使用和不使用LoadExtensions,使用了一个模块来设置绑定,最后一次尝试如下所示
internal class AppConfiguration
{
internal AppConfiguration( )
{
var settings = new NinjectSettings() { LoadExtensions = false };
Kernel = new StandardKernel(settings);
Load();
}
internal StandardKernel Kernel { get; set; }
public static AppConfiguration Instance
{
get { return _instance ?? (_instance = new AppConfiguration()); }
}
private static AppConfiguration _instance;
private void Load()
{
Kernel.Bind<ILoggerAspect>().To<Log4NetAspect>().InSingletonScope();
Kernel.Bind<MyClass>().ToSelf().Intercept().With<ILoggerAspect>();
}
internal static StandardKernel Resolver()
{
return Instance.Kernel;
}
}我的Logger属性如下所示
public class LogAttribute : InterceptAttribute
{
public override IInterceptor CreateInterceptor(IProxyRequest request)
{
return request.Context.Kernel.Get<ILoggerAspect>();
}
}我的拦截器就像这样
public class Log4NetAspect : SimpleInterceptor, ILoggerAspect
{
protected override void BeforeInvoke(IInvocation invocation)
{
Debug.WriteLine("Running " + invocation.ReturnValue);
base.BeforeInvoke(invocation);
}
public new void Intercept(IInvocation invocation)
{
try
{
base.Intercept(invocation);
}
catch (Exception e)
{
Debug.WriteLine("Exception: " + e.Message);
}
}
protected override void AfterInvoke(IInvocation invocation)
{
Debug.WriteLine("After Method");
base.AfterInvoke(invocation);
}
}发布于 2012-04-03 07:02:14
很可能您没有将Ninject.Extensions.Interception.DynamicProxy或Ninject.Extensions.Interception.Linfu部署到应用程序和Ninject.Extensions.Interception旁边。你必须选其中之一。
使用现在就有的代码(LoadExtensions=false),它将无法获取特定的拦截库--您应该删除它,并且正常的扩展加载应该在创建时将扩展连接到内核中,以便截获位来获取它。
发布于 2016-06-27 16:48:29
除了Remo Gloor's answer (它指示我为Ninject.Extensions.Interception.DynamicProxy添加nuget包)之外,我一直得到与OP相同的异常,直到手动加载了一个DynamicProxyModule -- FuncModule也是手动加载的,以避免涉及工厂扩展的类似错误:
_kernel = new StandardKernel(
new NinjectSettings{LoadExtensions = true},
new FuncModule(),
new DynamicProxyModule()); // <~ this is what fixed ithttps://stackoverflow.com/questions/9988204
复制相似问题