Ninject.MockingKernel.Moq安全异常 [英] Ninject.MockingKernel.Moq security exception

查看:116
本文介绍了Ninject.MockingKernel.Moq安全异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在IoC容器中使用Ninject,并且试图编写一些单元测试.我找到了Ninject Mocking Kernel,所以我认为我可以尝试一下,但是我无法通过最简单的测试.我缺少一些东西,需要一点帮助.

I am using Ninject for my IoC container and I'm trying to write some unit tests. I found the Ninject Mocking Kernel so I thought I'd give it a go but I can't get the simplest test to pass. I am missing something and need a little help.

Moq.4.0.10827.Final Ninject-2.2.0.0-发布网-4.0 Ninject.MockingKernel-2.2.0.0-release-net-4.0

Moq.4.0.10827.Final Ninject-2.2.0.0-release-net-4.0 Ninject.MockingKernel-2.2.0.0-release-net-4.0

我的单元测试...

    [TestMethod]
    public void Constructor_CanInitialize()
    {
        var kernel = new MoqMockingKernel();

        var mock = kernel.Get<IDataRepository>(); <--Error here

        Assert.IsInstanceOfType(mock, typeof(DataRepository));
    }

这是错误...

测试方法TestFixture.Constructor_CanInitialize抛出异常: System.TypeAccessException:尝试通过安全透明方法'Ninject.MockingKernel.Moq.MoqMockProvider.Create(Ninject.Activation.IContext)'访问安全关键类型'Moq.Mock'失败.

Test method TestFixture.Constructor_CanInitialize threw exception: System.TypeAccessException: Attempt by security transparent method 'Ninject.MockingKernel.Moq.MoqMockProvider.Create(Ninject.Activation.IContext)' to access security critical type 'Moq.Mock' failed.

装配'Ninject.MockingKernel.Moq,版本= 2.2.0.0,文化=中性,PublicKeyToken = c7192dc5380945e7'标记有AllowPartiallyTrustedCallersAttribute,并使用2级安全透明性模型.级别2透明导致默认情况下AllowPartiallyTrustedCallers程序集中的所有方法变为安全透明,这可能是导致此异常的原因.

Assembly 'Ninject.MockingKernel.Moq, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model. Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.

在c:\ Projects \ Ninject \ ninject.mockingkernel \ src \ Ninject.MockingKernel.Moq \ MoqMockProvider.cs中:第64行 在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Context.cs中的Ninject.Activation.Context.Resolve()处:第157行 在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ KernelBase.cs中的Ninject.KernelBase.b_ 7(IContext上下文):行375 在System.Linq.Enumerable处.<> c _DisplayClass12 3.<CombineSelectors>b__11(TSource x) at System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() 在System.Linq.Enumerable.SingleOrDefault(IEnumerable 1 source) at Ninject.Planning.Targets.Target 1.GetValue(Type service,IContext parent)在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Planning \ Targets \ Target.cs中:行179 在Ninject.Planning.Targets.Target 1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs: line 147 at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 97 at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass2.<Create>b__1(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 81 at System.Linq.Enumerable.WhereSelectArrayIterator 2.MoveNext() 在System.Linq.Buffer 1..ctor(IEnumerable 1源上) 在System.Linq.Enumerable.ToArray(IEnumerable 1 source) at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 80 at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs: line 157 at Ninject.KernelBase.<Resolve>b__7(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs: line 375 at System.Linq.Enumerable.<>c__DisplayClass12 3.b__11(TSource x) 在System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b1 1.MoveNext() 在System.Linq.Enumerable.Single(IEnumerable`1来源) 在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Syntax \ ResolutionExtensions.cs中的Ninject.ResolutionExtensions.Get(IResolutionRoot根,IParameter []参数)处:第37行 在TestFixture.cs的TestFixture.Constructor_CanInitialize()中:第32行

at Ninject.MockingKernel.Moq.MoqMockProvider.Create(IContext context) in c:\Projects\Ninject\ninject.mockingkernel\src\Ninject.MockingKernel.Moq\MoqMockProvider.cs: line 64 at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs: line 157 at Ninject.KernelBase.b_7(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs: line 375 at System.Linq.Enumerable.<>c_DisplayClass123.<CombineSelectors>b__11(TSource x) at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.SingleOrDefault(IEnumerable1 source) at Ninject.Planning.Targets.Target1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs: line 179 at Ninject.Planning.Targets.Target1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs: line 147 at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 97 at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass2.<Create>b__1(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 81 at System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() at System.Linq.Buffer1..ctor(IEnumerable1 source) at System.Linq.Enumerable.ToArray(IEnumerable1 source) at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 80 at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs: line 157 at Ninject.KernelBase.<Resolve>b__7(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs: line 375 at System.Linq.Enumerable.<>c__DisplayClass123.b__11(TSource x) at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b11.MoveNext() at System.Linq.Enumerable.Single(IEnumerable`1 source) at Ninject.ResolutionExtensions.Get(IResolutionRoot root, IParameter[] parameters) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs: line 37 at TestFixture.Constructor_CanInitialize() in TestFixture.cs: line 32

推荐答案

我已经在同一个问题上作战了一段时间了. 请参阅以下主题以跟踪我的工作: https://groups.google.com/d /topic/ninject/xInlcd2b1l8/discussion

I have been fighting the same problem for a little while now. See this thread to follow my effort: https://groups.google.com/d/topic/ninject/xInlcd2b1l8/discussion

假设您正在使用NuGet,则有两个选择:

Assuming that you are using NuGet you have two options:

  • 不要立即使用Ninject.MockingKernel或
  • 从源代码中自行构建.

只要有可用的更新版本,您就可以通过NuGet在项目上保留一个选项卡以再次使用它.

Any way you may want to keep a tab on the project to use it via NuGet again once an updated version is available.

这篇关于Ninject.MockingKernel.Moq安全异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆