小编And*_*res的帖子

处置IActivationBlock并导入IKernel时出错

当我尝试使用下面的解决方案将Ninject 3与MVC 4 RC Web Api项目一起使用时,问题就出现了:

http://www.peterprovost.org/blog/2012/06/19/adding-ninject-to-web-api/

此解决方案使用IActivationBlock(使用IKernel中的BeginBlock方法创建)来实现调用范围.使用常规Ninject项目,似乎工作正常,但是当项目使用扩展Ninject.Extensions.Interception.DynamicProxy时,调用激活块的Dispose方法时会发生以下异常:

加载Ninject组件IAdviceRegistry时出错

没有这样的组件已在内核的组件容器中注册.

并且,在下一次创建新的ActivationBlock并调用Resolve方法时,会发生以下异常:

加载Ninject组件ICache时出错

没有这样的组件已在内核的组件容器中注册.

似乎问题与MVC更新没有直接关系,但是DynamicProxy和IActivationBlock之间存在一些不兼容性.

编辑:

问题的根源是,其中一个类型在构造函数上需要IKernel,并且它与DynamicProxy没有直接关系,但第一个异常仅在引用此程序集时发生.

因此,如果您的类型需要IKernel,则总会出现第二个错误(与ICache相关).

ninject asp.net-mvc-4 asp.net-web-api

6
推荐指数
1
解决办法
311
查看次数

无法验证模拟输出流中的写入值

我的TcpTransport类中有以下方法:

public synchronized void send(Envelope envelope) throws IOException {
    ensureSocketOpen();
    String envelopeString = envelopeSerializer.serialize(envelope);

    if (traceWriter != null &&
            traceWriter.isEnabled()) {
        traceWriter.trace(envelopeString, TraceWriter.DataOperation.SEND);
    }

    try {
        byte[] envelopeBytes = envelopeString.getBytes("UTF-8");
        outputStream.write(envelopeBytes);
        outputStream.flush();
    } catch (UnsupportedEncodingException e) {
        throw new IllegalArgumentException("Could not convert the serialized envelope to a UTF-8 byte array", e);
    }
}
Run Code Online (Sandbox Code Playgroud)

并测试它:

// Arrange
TcpTransport target = getAndOpenTarget(); // gets a valid instance
Envelope envelope = mock(Envelope.class);
String serializedEnvelope = DataUtil.createRandomString(200);
when(envelopeSerializer.serialize(envelope)).thenReturn(serializedEnvelope);

// Act
target.send(envelope);

// …
Run Code Online (Sandbox Code Playgroud)

java junit mockito

0
推荐指数
1
解决办法
376
查看次数

标签 统计

asp.net-mvc-4 ×1

asp.net-web-api ×1

java ×1

junit ×1

mockito ×1

ninject ×1