Ninject拦截动态代理问题

4
我正在尝试使用Ninject进行拦截设置,我们已经使用它作为依赖注入框架一段时间了。
我从NuGet下载了拦截扩展并尝试了Castle Dynamicproxy实现和LinFu实现,但都不能与我们的应用程序配合使用。在创建一个没有无参构造函数的类的代理时,Castle会给出一个错误,由于所有服务对象都是通过构造函数注入其依赖项的,所以这是一个问题。错误信息如下:System.ArgumentException: Can not instantiate proxy of class: emedia.RapidSystems.Subscriber.Presenters.RRSubmissionPresenter. Could not find a parameterless constructor. Parameter name: constructorArguments
LinFu拦截器效果更好,直到代码调用带有泛型参数的方法时,它才给出以下错误信息:System.ArgumentException: Generic types are not valid. Parameter name: 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

}

添加和获取所有操作都正常,但在代理上调用GetEntity时出现错误。

此时我陷入困境,因为拦截器都无法与代码库配合使用。是否有人已经成功地将Ninject拦截器应用于真正的复杂生产系统,而不是一个简单的演示类?如果是,请告诉我如何做到的。我不介意使用任何拦截器,只要它能正常工作。

或者,Ninject的拦截功能还不够成熟,我需要考虑使用其他替代品,比如Unity吗?

1个回答

2
使用版本3.0.0-rc2,它增加了对接口代理的支持到动态代理。

2
我尝试从NuGet下载它,但它根本无法运行,并显示错误“找不到方法:'System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)'。” 无论如何,我无法在生产环境中使用预发布版本,所以我想答案是它还不够成熟,我必须等到版本3真正发布。 - Mant101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接