4

我试图设置拦截来处理Ninject,我们一直使用它作为我们的依赖注入框架。Ninject拦截动态代理问题

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

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

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

的李林甫拦截器更好地工作,直到,直到代码调用一个泛型参数的方法,然后它给了我下面的:

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 

} 

添加和GETALL做工精细,但错误发生时,GetEntity被呼吁代理。

在这一点上我卡住了,因为拦截器都不能与代码库一起工作。有没有人有Ninject拦截工作与一个真正的复杂生产系统,而不是一个简单的演示课,如果是的话如何?只要它有效,我不介意使用哪个拦截器。或者是与Ninject拦截还不够成熟,我是否需要考虑用Unity等其他东西替代整个事物?

回答

3

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

+2

我试图从NuGet下载它根本没有运行,并给出一个错误“Method not found:'System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type )”。” 无论如何,我无法在生产环境中使用预发布版本,所以我想答案是它还不够成熟,我必须等到版本3才真正发布。 – Mant101 2012-01-16 11:47:05