Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带构造函数参数的Ninject Get<T>

带构造函数参数的Ninject Get<T>
EN

Stack Overflow用户
提问于 2015-11-19 00:55:52
回答 2查看 244关注 0票数 3

这是我的模块:

代码语言:javascript
运行
AI代码解释
复制
public class LoggerModule : NinjectModule
{
    public override void Load()
    {
        Bind<ILogger>().To<NLogLogger>()
            .WithConstructorArgument(
                typeof(Type),
                x => x.Request.ParentContext.Plan.Type);
    }
}

因此,如您所见,NLogLogger期望将Type传递到构造函数中。

这是我的单元测试:

代码语言:javascript
运行
AI代码解释
复制
    [Test]
    public void ResolveLoggerDependency()
    {
        var module = new LoggerModule();
        var kernal = new StandardKernel(module);
        var service = kernal.Get<ILogger>(new ConstructorArgument("type", typeof(int)));
        Assert.That(service, Is.Not.Null);
    }

它在kernal.Get<ILogger>上抛出一个空引用错误,所以我只能假设我没有正确地传递构造函数值。使用Type时如何传递Get<T>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-19 12:44:56

因此,这个问题似乎与您的其他问题有关。

这个问题中的要求是将要注入它的对象的类型注入到NLogLogger中。

在这种情况下,注册假设这个接口ILogger不会在它将被注入的父类的上下文之外被解析。当您直接尝试解析ILogger接口时,您将得到异常,因为没有父类上下文。

我假设在您的单元测试中,您希望测试这个注册实际上是有效的。我建议如下:

首先,创建一个您将在测试中使用的类:

代码语言:javascript
运行
AI代码解释
复制
public class TestClass
{
    private readonly ILogger m_Logger;

    public TestClass(ILogger logger)
    {
        m_Logger = logger;
    }

    public ILogger Logger
    {
        get { return m_Logger; }
    }
}

然后在单元测试中使用这样的类:

代码语言:javascript
运行
AI代码解释
复制
[Test]
public void ResolveLoggerDependency()
{
    var module = new LoggerModule();
    var kernal = new StandardKernel(module);
    var test_object = kernal.Get<TestClass>();
    Assert.That(test_object.Logger, Is.Not.Null);
}

您可以进一步验证NLogLogger是否实际使用TestClass类的名称来构造NLog记录器。这可能需要使用反射,但我不确定。

票数 3
EN

Stack Overflow用户

发布于 2015-11-19 08:30:27

在Load方法中,您可以使用Bind<ILogger>().To<NLogLogger>();设置它

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33799180

复制
相关文章
C++带参数的构造函数 | 有参构造函数
在C++中,程序员希望对不同的对象赋予不同的初值,可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数, 以实现不同的初始化。
小林C语言
2021/01/28
4.1K0
C++带参数的构造函数 | 有参构造函数
Aop动态生成代理类时支持带参数构造函数
  在某些情况下,我们需要植入AOP代码的类并没有默认构造函数。那么此时动态生成的代理类也需要相同签名的构造函数,并且内部调用原始类的构造函数。自己折腾了1晚上没搞定,现在搞定了发出来供大家一起学习探讨。
Zachary_ZF
2018/09/10
1.2K0
Aop动态生成代理类时支持带参数构造函数
带参数的main函数
copy是DOS下的拷贝命令,是执行文件名,其功能就是将C盘根目录下的文件source.cpp拷贝到C盘bak子目录下,并改名为prg.cpp。
叶茂林
2023/07/28
2680
带参数的main函数
React篇(053)-构造函数使用带 props 参数的目的是什么?
在调用super()方法之前,子类构造函数不能使用this引用。这同样适用于ES6子类。将props参数传递给super()的主要原因是为了在子构造函数中访问this.props。
齐丶先丶森
2022/12/05
1.4K0
接口测试|Postman发送带参数的Get请求
Postman发送带参数的Get请求 发送带参数的GET请求 示例:微信公众号获取access_token接口,业务操作步骤 1、打开微信公众平台,微信扫码登录:https://mp.weixin.q
霍格沃兹测试开发Muller老师
2023/01/31
1.6K0
java scanner构造函数_使用Scanner作为构造函数的参数的Java
这是一个学校任务的问题,这就是为什么我这样做的原因。使用Scanner作为构造函数的参数的Java
用户7886150
2021/04/26
2.9K0
静态代码块/实例代码块/不带参数的构造方法/带参数的构造方法 执行顺序
得到的结果为:(先执行静态代码块,再执行实例代码块,再调用有参数的构造方法,最后执行默认的构造方法)
小雨的分享社区
2022/10/26
1.2K0
静态代码块/实例代码块/不带参数的构造方法/带参数的构造方法  执行顺序
python 函数参数的传递(参数带星号的说明)
python中函数参数的传递是通过赋值来传递的。函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要有四种方式: 1.F(arg1,arg2,...) 这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的 值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就
hbbliyong
2018/03/05
3.8K0
python函数中带*及**参数
    另外还可以传入两种特殊的参数:带*或**的参数。这两类形式的参数都可以传入任意数量的实参,它们的不同点主要在于*参数传入的为一个元祖(tuple);**参数出入的则为一个字典(dict)。由于传入的参数数量不确定,因此当它们与普通参数放在一起时,必须把它们放在最后。
py3study
2020/01/06
1.3K0
【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
在 Kotlin 类中 , 可以在 类声明 时 在 类名后 定义 " 主构造函数 " ;
韩曙亮
2023/03/30
5K0
HttpClient4.X发送带参数的Get请求「建议收藏」
HttpClient 是apache 组织下面的一个用于处理HTTP 请求和响应的开源工具。所用jar包为httpclient-4.3.6.jar、httpcore-4.3.3.jar、httpmime-4.3.6.jar、commons-codec-1.6.jar。
全栈程序员站长
2022/09/15
8230
通过反射实现IOC功能
这段时间园子里有不少介绍IOC组件的文章,由于自己也一直在学习IOC的各种组件,及IOC的思想,常见的IOC组件很多:AutoFac、Ninject、Utity包括.NET自带的MEF等。由于今天周六,女朋友去加班了(也是一枚标准的程序媛,做java开发),闲来没事,自己就想着根据反射可以自己写一个简易的IOC组件。IOC组件说白了就是根据反射实例化对应的接口。废话不多说,开始说说我的解决方案。
写代码的猿
2019/04/11
6400
通过反射实现IOC功能
Java线程池及其构造函数参数的含义
在多线程编程中,线程池是一种常用的技术,它可以有效地管理和复用线程,提高程序的性能和资源利用率。Java提供了ThreadPoolExecutor类来实现线程池的功能,并且该类的构造函数提供了多个参数用于配置线程池的行为。本文将深入探讨Java线程池的特性以及构造函数参数的含义,帮助读者理解并正确使用线程池。
疯狂的KK
2023/09/22
2300
Java线程池及其构造函数参数的含义
Python之函数的进阶(带参数的装饰器)
函数篇--装饰器二 带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函数之前要做的''') re = func(*args,**kwargs) if flag: print('''执行函数之后要做的''')
新人小试
2018/04/12
1.4K0
【Python】构造函数、析构函数与可变参数传递
在《【Python】Windows版本的Python开发环境的配置,Helloworld,Python中文问题,输入输出、条件、循环、数组、类》(点击打开链接)虽然一定程度上介绍了Python中类的用法,然而并没有涉及到类中最重要的两个东西,一个是构造函数,另一个是析构函数。
用户7886150
2020/12/20
1.4K0
带右值引用的拷贝构造函数和运算符重载函数
考虑一个占用堆资源类对象的拷贝构造和赋值运算符重载函数,当我们用一个临时对象去拷贝构造一个新对象或者赋值给一个已经存在的对象时,会出现一下的问题:如string类
lexingsen
2022/02/25
7930
带右值引用的拷贝构造函数和运算符重载函数
js 中的构造函数,构造函数作用,构造函数和普通函数的区别
函数的定义方式: 1.声明式函数定义: function 函数名 (){};这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在这个作用域内,你都可以调用这个函数为你所用。 2.函数表达式:let fun = function(){}; 此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。 3.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。
全栈程序员站长
2022/10/04
3.6K0
Python基础语法-函数-函数装饰器-带参数的装饰器
装饰器可以接受参数,这意味着我们可以在运行时指定一些配置选项。例如,下面是一个带有参数的装饰器,它可以接受一个消息并打印该消息:
玖叁叁
2023/04/17
1.1K0
Python基础语法-函数-函数装饰器-带参数的类装饰器
在这个例子中,我们定义了一个名为“DecoratorClass”的类装饰器。这个类接受一个参数“message”,并在实例化时将其保存在“self.message”属性中。然后,我们定义了一个名为“call”的特殊方法,它接受一个函数作为参数,并返回一个包装器函数。
玖叁叁
2023/04/17
1.3K0
点击加载更多

相似问题

Ninject :构造函数参数

20

带委托的Ninject构造函数

10

Ninject Get<T> WhenTargetHas<T>

111

带构造函数参数的Mock.Of<T>

11

NInject:如何在Get<T>()时传递参数?

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档