我正在爲我的IoC容器使用Ninject,並且正在嘗試編寫一些單元測試。我發現了Ninject Mocking Kernel,所以我想我會放棄它,但我無法通過最簡單的測試。我錯過了一些東西,需要一點幫助。Ninject.MockingKernel.Moq安全異常
Moq.4.0.10827.Final Ninject-2.2.0.0釋放淨4.0 Ninject.MockingKernel-2.2.0.0釋放淨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(Ninj ect.Activation.IContext)'訪問安全關鍵類型'Moq.Mock'失敗。
大會 'Ninject.MockingKernel.Moq,版本= 2.2.0.0,文化=中性公鑰= c7192dc5380945e7' 標有AllowPartiallyTrustedCallersAttribute程序,並使用2級安全透明度模型。級別2透明會導致AllowPartiallyTrustedCallers程序集中的所有方法默認情況下變爲安全透明,這可能是此異常的原因。
在Ninject.MockingKernel.Moq.MoqMockProvider.Create(IContext上下文)在C:\項目\ Ninject \ ninject.mockingkernel \ SRC \ Ninject.MockingKernel.Moq \ MoqMockProvider.cs:在Ninject.Activation線64 。在C:\ Projects \ Ninject \ ninject \中使用Context.Resolve():Ninject.KernelBase.b_ 7(IContext上下文)中的第157行 :c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ src \ Ninject \ KernelBase.cs:行375 在System.Linq.Enumerable。 <>Ç _DisplayClass12 3.<CombineSelectors>b__11(TSource x) at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() 在System.Linq.Enumerable.SingleOrDefault在C(IEnumerable的1 source) at Ninject.Planning.Targets.Target
1.GetValue(服務類型,IContext親本):\項目\ Ninject \ ninject \ SRC \ Ninject \規劃\目標\ 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) at System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b1
1.MoveNext() at System.Linq.Enumerable.Single(IEnumerable`1 source) at Ninject.ResolutionExtensions.Get(IResolutionRoot根,IParameter []參數)在C:\項目\ Ninject \ ninject \ SRC \ Ninject \語法\ ResolutionExtensions.cs:線37 在TestFixture.Constructor_CanInitialize()在TestFixture.cs:線32
我已經縮小下來在.net v4的東西。如果我使用v3.5程序集,一切都按預期工作。 – oliwa
也許你想看看下面的問題。 http://stackoverflow.com/questions/5055632/net-4-allowpartiallytrustedcallers-attribute-and-security-markings-like-securi –