4

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

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

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

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 之类的其他东西替换整个东西?

4

1 回答 1

2

使用版本 3.0.0-rc2。它将对接口代理的支持添加到动态代理

于 2012-01-14T00:38:57.410 回答