c# - Ninject拦截动态代理问题

标签 c# ninject castle-dynamicproxy ninject-interception linfu-dynamicproxy

我正在尝试设置拦截以与 Ninject 一起工作,我们一直将其用作我们的依赖注入(inject)框架。

我已经从 NuGet 下载了拦截扩展,并在 CaSTLe Dynamicproxy 实现和 LinFu 实现上进行了尝试,但都无法与我们的应用程序一起使用。

CaSTLe 在没有无参数构造函数的类上创建代理时出错,因为所有服务对象都通过构造函数注入(inject)了依赖项,这是一个问题。错误是:

System.ArgumentException:无法实例化类的代理:emedia.RapidSystems.Subscriber.Presenters.RRSubmissionPresenter。 找不到无参数的构造函数。 参数名称:constructorArguments

LinFu 拦截器工作得更好,直到代码调用一个带有泛型参数的方法然后它给了我以下内容:

System.ArgumentException:通用类型无效。 参数名称:methodInfo

这是我试图拦截的其中一个类的简化版本代码:

[LogCalls]
public class Repository<T> : IRepository<T>
        where T : class
{   
    public virtual T GetEntity<TKey>(ObjectContext context, TKey key)
    {
        var entity = GetEntity(context, key, _emptyLoadingStrategy);
        return entity;
    }

    public virtual IQueryable<T> GetAll(ObjectContext context)
    {
        var query = GetAll(context, _emptyLoadingStrategy);
        return query;
    }

    public virtual T Add(ObjectContext context, T entity)
    {
        context.AddObject(EntitySetName(context), entity);
        return entity;
    }

     //other code goes here

}

Add 和 GetAll 工作正常,但在代理上调用 GetEntity 时会发生错误。

在这一点上我被卡住了,因为这两个拦截器都不能与代码库一起工作。有没有人让 Ninject 拦截与一个真正复杂的生产系统一起工作,而不是一个简单的演示类,如果是的话,怎么做?我不介意使用哪个拦截器,只要它有效即可。

或者 Ninject 的拦截还不够成熟,我是否需要考虑用 Unity 等其他东西替换整个东西?

最佳答案

使用版本 3.0.0-rc2。它为动态代理添加了对接口(interface)代理的支持

关于c# - Ninject拦截动态代理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848317/

相关文章:

c# - 保持连接字符串打开或不打开 C#

.net - CaSTLe Windsor InternalsVisibleTo Silverlight

c# - 是否可以在 C# 中为静态类或静态方法生成动态代理?

asp.net-mvc - Ninject - 基于子域动态指定连接字符串

debugging - 为什么使用 Moq 创建的模拟实例会抛出 System.BadImageFormatException?

c# - UWP 的 kernel32.dll 中的 SetThreadExecutionState 模拟

c# - 为什么这段代码消耗越来越多的内存?

c# - MVCMailer smtp mailsettings 以编程方式设置配置设置

c# - Ninject Conventions 是否仅适用于公共(public)类(class)?

c# - 在 MVC 4 中为 3 层架构配置 Ninject