ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-04 13:52:34  阅读:211  来源: 互联网

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


我正在尝试设置拦截以使用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

}

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

此时我被卡住了,因为拦截器都不能与代码库一起工作.有没有人得到Ninject拦截工作与一个真正复杂的生产系统,而不是一个简单的演示类,如果是这样,如何?我不介意我使用哪种拦截器,只要它有效.

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

解决方法:

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

标签:c,ninject,castle-dynamicproxy,ninject-interception,linfu-dynamicproxy
来源: https://codeday.me/bug/20190704/1377792.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有