Ninject Interception动态代理问题



我正在尝试设置拦截以使用Ninject,我们已经将其用作依赖注入框架一段时间了。

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

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

System.ArgumentException:无法实例化类emedia的代理。RapidSystems.Subscriber.Presenters.RS SubmissionPresenter。找不到无参数构造函数。参数名称: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版本。它为动态代理添加了对接口代理的支持

最新更新