JasperFx / lamar

Fast Inversion of Control Tool and Successor to StructureMap
https://jasperfx.github.io/lamar
MIT License
573 stars 119 forks source link

StackOverflowException in a specific use case #277

Closed cribeiro84 closed 2 years ago

cribeiro84 commented 3 years ago

I’m working on a migration from .NET Framework 4.8 to .NET 5 (and .NET standard 2.0 when applicable), we were using StructureMap and now we moved to Lamar. Now I’m facing a strange issue that’s throwing StackOverflowException in an ASP.NET MVC running under .Net 4.8. If I try to get an instance of an interface that has around 70 dependencies, it throws the exception, I’ve found which dependency was causing the issue and when I remove this specific dependency, the get instance works. However, if I try to get only the problematic dependency, the instance is retrieved. It does not make sense.

The same interface is normally retrieved with StructureMap. I’m not able to get any deep details or where exactly it’s the root cause once when I get the WhatIHave result, it does not show any inconsistency.

Any ideia on how I could troubleshoot it?

I really appreciate any guidance that can be given.

jeremydmiller commented 3 years ago

My first suspicion is that there's a bi-directional dependency, but Lamar is set up to discover those. I'd honestly need a lot more information to make any kind of guess here. Anything you can share about the dependency that causes the problem? Anything unusual about it? Some kind of bi-directional or circular dependency maybe?

cribeiro84 commented 3 years ago

My first suspicious was that also but I couldn't find any bi-directional dependency between these two Interfaces. I will try to illustrate my case:

In addition to the test analysis, I've created a dummy InterfaceC and ClassC that has exactly the same constructor of concrete class of InterfaceA that no other place references it and the same issue happes, StackOverflowException. If I remove from the Constructor the reference to InterfaceB, it works.

jeremydmiller commented 3 years ago

If you do that, try to create InterfaceB from the container, and see if you hit a breakpoint on the concrete type for InterfaceA. That'll either prove or disprove the bi-directional dependency issue.

cribeiro84 commented 3 years ago

I didn't do that test before and I just tried but the InterfaceA was not hit. The InterfaceB instance has been created normally without hitting InterfaceA concrete class/constructor. I'm thinking to download the source code of Lamar and debug it to try to figure out what could be the reason. I believe it's something related to ASP.NET MVC based on .NET Framework 4.8 where I'm trying to introduce Lamar in replacement of StructureMap which was working fine.

jeremydmiller commented 3 years ago

Or something in the Lamar planning that finds an infinite loop -- even though it's supposed to find that. If you have R# or Rider you can debug through the Lamar code w/o having to clone it first.

cribeiro84 commented 3 years ago

Thanks for the tip, I just installed Rider and now it's throwing StackOverflowException during the initial request which was not happening before. And Rider was able to stop where the code is throwing the exception, it's in Variable.cs at line:

public override int GetHashCode() => (this.VariableType != (Type) null ? this.VariableType.GetHashCode() : 0) * 397 ^ (this.Usage != null ? this.Usage.GetHashCode() : 0);

I was not able to identify for which type it did it, I'm still testing but in case you have any new tip to help on the troubleshooting.

Thanks a lot

cribeiro84 commented 3 years ago

This is the whole Stack of the execution:

Variable.GetHashCode() at Variable.cs:line 109 ObjectEqualityComparer<Variable>.GetHashCode() Dictionary<Variable, Expression>.FindEntry() Dictionary<Variable, Expression>.TryGetValue() LambdaDefinition.ExpressionFor() Enumerable.WhereSelectArrayIterator<Variable, Expression>.MoveNext() new List<Expression>() CollectionExtensions.ToReadOnly<System.Linq.Expressions.Expression>() Expression.New() InstanceConstructorFrame.WriteExpressions() [876] InstanceConstructorFrame.WriteExpressions() [875] InstanceConstructorFrame.WriteExpressions() [874] InstanceConstructorFrame.WriteExpressions() [873] InstanceConstructorFrame.WriteExpressions() [872] InstanceConstructorFrame.WriteExpressions() [871] InstanceConstructorFrame.WriteExpressions() [870] InstanceConstructorFrame.WriteExpressions() [869] InstanceConstructorFrame.WriteExpressions() [868] InstanceConstructorFrame.WriteExpressions() [867] InstanceConstructorFrame.WriteExpressions() [866] InstanceConstructorFrame.WriteExpressions() [865] InstanceConstructorFrame.WriteExpressions() [864] InstanceConstructorFrame.WriteExpressions() [863] InstanceConstructorFrame.WriteExpressions() [862] InstanceConstructorFrame.WriteExpressions() [861] InstanceConstructorFrame.WriteExpressions() [860] InstanceConstructorFrame.WriteExpressions() [859] InstanceConstructorFrame.WriteExpressions() [858] InstanceConstructorFrame.WriteExpressions() [857] InstanceConstructorFrame.WriteExpressions() [856] InstanceConstructorFrame.WriteExpressions() [855] InstanceConstructorFrame.WriteExpressions() [854] InstanceConstructorFrame.WriteExpressions() [853] InstanceConstructorFrame.WriteExpressions() [852] InstanceConstructorFrame.WriteExpressions() [851] InstanceConstructorFrame.WriteExpressions() [850] InstanceConstructorFrame.WriteExpressions() [849] InstanceConstructorFrame.WriteExpressions() [848] InstanceConstructorFrame.WriteExpressions() [847] InstanceConstructorFrame.WriteExpressions() [846] InstanceConstructorFrame.WriteExpressions() [845] InstanceConstructorFrame.WriteExpressions() [844] InstanceConstructorFrame.WriteExpressions() [843] InstanceConstructorFrame.WriteExpressions() [842] InstanceConstructorFrame.WriteExpressions() [841] InstanceConstructorFrame.WriteExpressions() [840] InstanceConstructorFrame.WriteExpressions() [839] InstanceConstructorFrame.WriteExpressions() [838] InstanceConstructorFrame.WriteExpressions() [837] InstanceConstructorFrame.WriteExpressions() [836] InstanceConstructorFrame.WriteExpressions() [835] InstanceConstructorFrame.WriteExpressions() [834] InstanceConstructorFrame.WriteExpressions() [833] InstanceConstructorFrame.WriteExpressions() [832] InstanceConstructorFrame.WriteExpressions() [831] InstanceConstructorFrame.WriteExpressions() [830] InstanceConstructorFrame.WriteExpressions() [829] InstanceConstructorFrame.WriteExpressions() [828] InstanceConstructorFrame.WriteExpressions() [827] InstanceConstructorFrame.WriteExpressions() [826] InstanceConstructorFrame.WriteExpressions() [825] InstanceConstructorFrame.WriteExpressions() [824] InstanceConstructorFrame.WriteExpressions() [823] InstanceConstructorFrame.WriteExpressions() [822] InstanceConstructorFrame.WriteExpressions() [821] InstanceConstructorFrame.WriteExpressions() [820] InstanceConstructorFrame.WriteExpressions() [819] InstanceConstructorFrame.WriteExpressions() [818] InstanceConstructorFrame.WriteExpressions() [817] InstanceConstructorFrame.WriteExpressions() [816] InstanceConstructorFrame.WriteExpressions() [815] InstanceConstructorFrame.WriteExpressions() [814] InstanceConstructorFrame.WriteExpressions() [813] InstanceConstructorFrame.WriteExpressions() [812] InstanceConstructorFrame.WriteExpressions() [811] InstanceConstructorFrame.WriteExpressions() [810] InstanceConstructorFrame.WriteExpressions() [809] InstanceConstructorFrame.WriteExpressions() [808] InstanceConstructorFrame.WriteExpressions() [807] InstanceConstructorFrame.WriteExpressions() [806] InstanceConstructorFrame.WriteExpressions() [805] InstanceConstructorFrame.WriteExpressions() [804] InstanceConstructorFrame.WriteExpressions() [803] InstanceConstructorFrame.WriteExpressions() [802] InstanceConstructorFrame.WriteExpressions() [801] InstanceConstructorFrame.WriteExpressions() [800] InstanceConstructorFrame.WriteExpressions() [799] InstanceConstructorFrame.WriteExpressions() [798] InstanceConstructorFrame.WriteExpressions() [797] InstanceConstructorFrame.WriteExpressions() [796] InstanceConstructorFrame.WriteExpressions() [795] InstanceConstructorFrame.WriteExpressions() [794] InstanceConstructorFrame.WriteExpressions() [793] InstanceConstructorFrame.WriteExpressions() [792] InstanceConstructorFrame.WriteExpressions() [791] InstanceConstructorFrame.WriteExpressions() [790] InstanceConstructorFrame.WriteExpressions() [789] InstanceConstructorFrame.WriteExpressions() [788] InstanceConstructorFrame.WriteExpressions() [787] InstanceConstructorFrame.WriteExpressions() [786] InstanceConstructorFrame.WriteExpressions() [785] InstanceConstructorFrame.WriteExpressions() [784] InstanceConstructorFrame.WriteExpressions() [783] InstanceConstructorFrame.WriteExpressions() [782] InstanceConstructorFrame.WriteExpressions() [781] InstanceConstructorFrame.WriteExpressions() [780] InstanceConstructorFrame.WriteExpressions() [779] InstanceConstructorFrame.WriteExpressions() [778] InstanceConstructorFrame.WriteExpressions() [777] InstanceConstructorFrame.WriteExpressions() [776] InstanceConstructorFrame.WriteExpressions() [775] InstanceConstructorFrame.WriteExpressions() [774] InstanceConstructorFrame.WriteExpressions() [773] InstanceConstructorFrame.WriteExpressions() [772] InstanceConstructorFrame.WriteExpressions() [771] InstanceConstructorFrame.WriteExpressions() [770] InstanceConstructorFrame.WriteExpressions() [769] InstanceConstructorFrame.WriteExpressions() [768] InstanceConstructorFrame.WriteExpressions() [767] InstanceConstructorFrame.WriteExpressions() [766] InstanceConstructorFrame.WriteExpressions() [765] InstanceConstructorFrame.WriteExpressions() [764] InstanceConstructorFrame.WriteExpressions() [763] InstanceConstructorFrame.WriteExpressions() [762] InstanceConstructorFrame.WriteExpressions() [761] InstanceConstructorFrame.WriteExpressions() [760] InstanceConstructorFrame.WriteExpressions() [759] InstanceConstructorFrame.WriteExpressions() [758] InstanceConstructorFrame.WriteExpressions() [757] InstanceConstructorFrame.WriteExpressions() [756] InstanceConstructorFrame.WriteExpressions() [755] InstanceConstructorFrame.WriteExpressions() [754] InstanceConstructorFrame.WriteExpressions() [753] InstanceConstructorFrame.WriteExpressions() [752] InstanceConstructorFrame.WriteExpressions() [751] InstanceConstructorFrame.WriteExpressions() [750] InstanceConstructorFrame.WriteExpressions() [749] InstanceConstructorFrame.WriteExpressions() [748] InstanceConstructorFrame.WriteExpressions() [747] InstanceConstructorFrame.WriteExpressions() [746] InstanceConstructorFrame.WriteExpressions() [745] InstanceConstructorFrame.WriteExpressions() [744] InstanceConstructorFrame.WriteExpressions() [743] InstanceConstructorFrame.WriteExpressions() [742] InstanceConstructorFrame.WriteExpressions() [741] InstanceConstructorFrame.WriteExpressions() [740] InstanceConstructorFrame.WriteExpressions() [739] InstanceConstructorFrame.WriteExpressions() [738] InstanceConstructorFrame.WriteExpressions() [737] InstanceConstructorFrame.WriteExpressions() [736] InstanceConstructorFrame.WriteExpressions() [735] InstanceConstructorFrame.WriteExpressions() [734] InstanceConstructorFrame.WriteExpressions() [733] InstanceConstructorFrame.WriteExpressions() [732] InstanceConstructorFrame.WriteExpressions() [731] InstanceConstructorFrame.WriteExpressions() [730] InstanceConstructorFrame.WriteExpressions() [729] InstanceConstructorFrame.WriteExpressions() [728] InstanceConstructorFrame.WriteExpressions() [727] InstanceConstructorFrame.WriteExpressions() [726] InstanceConstructorFrame.WriteExpressions() [725] InstanceConstructorFrame.WriteExpressions() [724] InstanceConstructorFrame.WriteExpressions() [723] InstanceConstructorFrame.WriteExpressions() [722] InstanceConstructorFrame.WriteExpressions() [721] InstanceConstructorFrame.WriteExpressions() [720] InstanceConstructorFrame.WriteExpressions() [719] InstanceConstructorFrame.WriteExpressions() [718] InstanceConstructorFrame.WriteExpressions() [717] InstanceConstructorFrame.WriteExpressions() [716] InstanceConstructorFrame.WriteExpressions() [715] InstanceConstructorFrame.WriteExpressions() [714] InstanceConstructorFrame.WriteExpressions() [713] InstanceConstructorFrame.WriteExpressions() [712] InstanceConstructorFrame.WriteExpressions() [711] InstanceConstructorFrame.WriteExpressions() [710] InstanceConstructorFrame.WriteExpressions() [709] InstanceConstructorFrame.WriteExpressions() [708] InstanceConstructorFrame.WriteExpressions() [707] InstanceConstructorFrame.WriteExpressions() [706] InstanceConstructorFrame.WriteExpressions() [705] InstanceConstructorFrame.WriteExpressions() [704] InstanceConstructorFrame.WriteExpressions() [703] InstanceConstructorFrame.WriteExpressions() [702] InstanceConstructorFrame.WriteExpressions() [701] InstanceConstructorFrame.WriteExpressions() [700] InstanceConstructorFrame.WriteExpressions() [699] InstanceConstructorFrame.WriteExpressions() [698] InstanceConstructorFrame.WriteExpressions() [697] InstanceConstructorFrame.WriteExpressions() [696] InstanceConstructorFrame.WriteExpressions() [695] InstanceConstructorFrame.WriteExpressions() [694] InstanceConstructorFrame.WriteExpressions() [693] InstanceConstructorFrame.WriteExpressions() [692] InstanceConstructorFrame.WriteExpressions() [691] InstanceConstructorFrame.WriteExpressions() [690] InstanceConstructorFrame.WriteExpressions() [689] InstanceConstructorFrame.WriteExpressions() [688] InstanceConstructorFrame.WriteExpressions() [687] InstanceConstructorFrame.WriteExpressions() [686] InstanceConstructorFrame.WriteExpressions() [685] InstanceConstructorFrame.WriteExpressions() [684] InstanceConstructorFrame.WriteExpressions() [683] InstanceConstructorFrame.WriteExpressions() [682] InstanceConstructorFrame.WriteExpressions() [681] InstanceConstructorFrame.WriteExpressions() [680] InstanceConstructorFrame.WriteExpressions() [679] InstanceConstructorFrame.WriteExpressions() [678] InstanceConstructorFrame.WriteExpressions() [677] InstanceConstructorFrame.WriteExpressions() [676] InstanceConstructorFrame.WriteExpressions() [675] InstanceConstructorFrame.WriteExpressions() [674] InstanceConstructorFrame.WriteExpressions() [673] InstanceConstructorFrame.WriteExpressions() [672] InstanceConstructorFrame.WriteExpressions() [671] InstanceConstructorFrame.WriteExpressions() [670] InstanceConstructorFrame.WriteExpressions() [669] InstanceConstructorFrame.WriteExpressions() [668] InstanceConstructorFrame.WriteExpressions() [667] InstanceConstructorFrame.WriteExpressions() [666] InstanceConstructorFrame.WriteExpressions() [665] InstanceConstructorFrame.WriteExpressions() [664] InstanceConstructorFrame.WriteExpressions() [663] InstanceConstructorFrame.WriteExpressions() [662] InstanceConstructorFrame.WriteExpressions() [661] InstanceConstructorFrame.WriteExpressions() [660] InstanceConstructorFrame.WriteExpressions() [659] InstanceConstructorFrame.WriteExpressions() [658] InstanceConstructorFrame.WriteExpressions() [657] InstanceConstructorFrame.WriteExpressions() [656] InstanceConstructorFrame.WriteExpressions() [655] InstanceConstructorFrame.WriteExpressions() [654] InstanceConstructorFrame.WriteExpressions() [653] InstanceConstructorFrame.WriteExpressions() [652] InstanceConstructorFrame.WriteExpressions() [651] InstanceConstructorFrame.WriteExpressions() [650] InstanceConstructorFrame.WriteExpressions() [649] InstanceConstructorFrame.WriteExpressions() [648] InstanceConstructorFrame.WriteExpressions() [647] InstanceConstructorFrame.WriteExpressions() [646] InstanceConstructorFrame.WriteExpressions() [645] InstanceConstructorFrame.WriteExpressions() [644] InstanceConstructorFrame.WriteExpressions() [643] InstanceConstructorFrame.WriteExpressions() [642] InstanceConstructorFrame.WriteExpressions() [641] InstanceConstructorFrame.WriteExpressions() [640] InstanceConstructorFrame.WriteExpressions() [639] InstanceConstructorFrame.WriteExpressions() [638] InstanceConstructorFrame.WriteExpressions() [637] InstanceConstructorFrame.WriteExpressions() [636] InstanceConstructorFrame.WriteExpressions() [635] InstanceConstructorFrame.WriteExpressions() [634] InstanceConstructorFrame.WriteExpressions() [633] InstanceConstructorFrame.WriteExpressions() [632] InstanceConstructorFrame.WriteExpressions() [631] InstanceConstructorFrame.WriteExpressions() [630] InstanceConstructorFrame.WriteExpressions() [629] InstanceConstructorFrame.WriteExpressions() [628] InstanceConstructorFrame.WriteExpressions() [627] InstanceConstructorFrame.WriteExpressions() [626] InstanceConstructorFrame.WriteExpressions() [625] InstanceConstructorFrame.WriteExpressions() [624] InstanceConstructorFrame.WriteExpressions() [623] InstanceConstructorFrame.WriteExpressions() [622] InstanceConstructorFrame.WriteExpressions() [621] InstanceConstructorFrame.WriteExpressions() [620] InstanceConstructorFrame.WriteExpressions() [619] InstanceConstructorFrame.WriteExpressions() [618] InstanceConstructorFrame.WriteExpressions() [617] InstanceConstructorFrame.WriteExpressions() [616] InstanceConstructorFrame.WriteExpressions() [615] InstanceConstructorFrame.WriteExpressions() [614] InstanceConstructorFrame.WriteExpressions() [613] InstanceConstructorFrame.WriteExpressions() [612] InstanceConstructorFrame.WriteExpressions() [611] InstanceConstructorFrame.WriteExpressions() [610] InstanceConstructorFrame.WriteExpressions() [609] InstanceConstructorFrame.WriteExpressions() [608] InstanceConstructorFrame.WriteExpressions() [607] InstanceConstructorFrame.WriteExpressions() [606] InstanceConstructorFrame.WriteExpressions() [605] InstanceConstructorFrame.WriteExpressions() [604] InstanceConstructorFrame.WriteExpressions() [603] InstanceConstructorFrame.WriteExpressions() [602] InstanceConstructorFrame.WriteExpressions() [601] InstanceConstructorFrame.WriteExpressions() [600] InstanceConstructorFrame.WriteExpressions() [599] InstanceConstructorFrame.WriteExpressions() [598] InstanceConstructorFrame.WriteExpressions() [597] InstanceConstructorFrame.WriteExpressions() [596] InstanceConstructorFrame.WriteExpressions() [595] InstanceConstructorFrame.WriteExpressions() [594] InstanceConstructorFrame.WriteExpressions() [593] InstanceConstructorFrame.WriteExpressions() [592] InstanceConstructorFrame.WriteExpressions() [591] InstanceConstructorFrame.WriteExpressions() [590] InstanceConstructorFrame.WriteExpressions() [589] InstanceConstructorFrame.WriteExpressions() [588] InstanceConstructorFrame.WriteExpressions() [587] InstanceConstructorFrame.WriteExpressions() [586] InstanceConstructorFrame.WriteExpressions() [585] InstanceConstructorFrame.WriteExpressions() [584] InstanceConstructorFrame.WriteExpressions() [583] InstanceConstructorFrame.WriteExpressions() [582] InstanceConstructorFrame.WriteExpressions() [581] InstanceConstructorFrame.WriteExpressions() [580] InstanceConstructorFrame.WriteExpressions() [579] InstanceConstructorFrame.WriteExpressions() [578] InstanceConstructorFrame.WriteExpressions() [577] InstanceConstructorFrame.WriteExpressions() [576] InstanceConstructorFrame.WriteExpressions() [575] InstanceConstructorFrame.WriteExpressions() [574] InstanceConstructorFrame.WriteExpressions() [573] InstanceConstructorFrame.WriteExpressions() [572] InstanceConstructorFrame.WriteExpressions() [571] InstanceConstructorFrame.WriteExpressions() [570] InstanceConstructorFrame.WriteExpressions() [569] InstanceConstructorFrame.WriteExpressions() [568] InstanceConstructorFrame.WriteExpressions() [567] InstanceConstructorFrame.WriteExpressions() [566] InstanceConstructorFrame.WriteExpressions() [565] InstanceConstructorFrame.WriteExpressions() [564] InstanceConstructorFrame.WriteExpressions() [563] InstanceConstructorFrame.WriteExpressions() [562] InstanceConstructorFrame.WriteExpressions() [561] InstanceConstructorFrame.WriteExpressions() [560] InstanceConstructorFrame.WriteExpressions() [559] InstanceConstructorFrame.WriteExpressions() [558] InstanceConstructorFrame.WriteExpressions() [557] InstanceConstructorFrame.WriteExpressions() [556] InstanceConstructorFrame.WriteExpressions() [555] InstanceConstructorFrame.WriteExpressions() [554] InstanceConstructorFrame.WriteExpressions() [553] InstanceConstructorFrame.WriteExpressions() [552] InstanceConstructorFrame.WriteExpressions() [551] InstanceConstructorFrame.WriteExpressions() [550] InstanceConstructorFrame.WriteExpressions() [549] InstanceConstructorFrame.WriteExpressions() [548] InstanceConstructorFrame.WriteExpressions() [547] InstanceConstructorFrame.WriteExpressions() [546] InstanceConstructorFrame.WriteExpressions() [545] InstanceConstructorFrame.WriteExpressions() [544] InstanceConstructorFrame.WriteExpressions() [543] InstanceConstructorFrame.WriteExpressions() [542] InstanceConstructorFrame.WriteExpressions() [541] InstanceConstructorFrame.WriteExpressions() [540] InstanceConstructorFrame.WriteExpressions() [539] InstanceConstructorFrame.WriteExpressions() [538] InstanceConstructorFrame.WriteExpressions() [537] InstanceConstructorFrame.WriteExpressions() [536] InstanceConstructorFrame.WriteExpressions() [535] InstanceConstructorFrame.WriteExpressions() [534] InstanceConstructorFrame.WriteExpressions() [533] InstanceConstructorFrame.WriteExpressions() [532] InstanceConstructorFrame.WriteExpressions() [531] InstanceConstructorFrame.WriteExpressions() [530] InstanceConstructorFrame.WriteExpressions() [529] InstanceConstructorFrame.WriteExpressions() [528] InstanceConstructorFrame.WriteExpressions() [527] InstanceConstructorFrame.WriteExpressions() [526] InstanceConstructorFrame.WriteExpressions() [525] InstanceConstructorFrame.WriteExpressions() [524] InstanceConstructorFrame.WriteExpressions() [523] InstanceConstructorFrame.WriteExpressions() [522] InstanceConstructorFrame.WriteExpressions() [521] InstanceConstructorFrame.WriteExpressions() [520] InstanceConstructorFrame.WriteExpressions() [519] InstanceConstructorFrame.WriteExpressions() [518] InstanceConstructorFrame.WriteExpressions() [517] InstanceConstructorFrame.WriteExpressions() [516] InstanceConstructorFrame.WriteExpressions() [515] InstanceConstructorFrame.WriteExpressions() [514] InstanceConstructorFrame.WriteExpressions() [513] InstanceConstructorFrame.WriteExpressions() [512] InstanceConstructorFrame.WriteExpressions() [511] InstanceConstructorFrame.WriteExpressions() [510] InstanceConstructorFrame.WriteExpressions() [509] InstanceConstructorFrame.WriteExpressions() [508] InstanceConstructorFrame.WriteExpressions() [507] InstanceConstructorFrame.WriteExpressions() [506] InstanceConstructorFrame.WriteExpressions() [505] InstanceConstructorFrame.WriteExpressions() [504] InstanceConstructorFrame.WriteExpressions() [503] InstanceConstructorFrame.WriteExpressions() [502] InstanceConstructorFrame.WriteExpressions() [501] InstanceConstructorFrame.WriteExpressions() [500] InstanceConstructorFrame.WriteExpressions() [499] InstanceConstructorFrame.WriteExpressions() [498] InstanceConstructorFrame.WriteExpressions() [497] InstanceConstructorFrame.WriteExpressions() [496] InstanceConstructorFrame.WriteExpressions() [495] InstanceConstructorFrame.WriteExpressions() [494] InstanceConstructorFrame.WriteExpressions() [493] InstanceConstructorFrame.WriteExpressions() [492] InstanceConstructorFrame.WriteExpressions() [491] InstanceConstructorFrame.WriteExpressions() [490] InstanceConstructorFrame.WriteExpressions() [489] InstanceConstructorFrame.WriteExpressions() [488] InstanceConstructorFrame.WriteExpressions() [487] InstanceConstructorFrame.WriteExpressions() [486] InstanceConstructorFrame.WriteExpressions() [485] InstanceConstructorFrame.WriteExpressions() [484] InstanceConstructorFrame.WriteExpressions() [483] InstanceConstructorFrame.WriteExpressions() [482] InstanceConstructorFrame.WriteExpressions() [481] InstanceConstructorFrame.WriteExpressions() [480] InstanceConstructorFrame.WriteExpressions() [479] InstanceConstructorFrame.WriteExpressions() [478] InstanceConstructorFrame.WriteExpressions() [477] InstanceConstructorFrame.WriteExpressions() [476] InstanceConstructorFrame.WriteExpressions() [475] InstanceConstructorFrame.WriteExpressions() [474] InstanceConstructorFrame.WriteExpressions() [473] InstanceConstructorFrame.WriteExpressions() [472] InstanceConstructorFrame.WriteExpressions() [471] InstanceConstructorFrame.WriteExpressions() [470] InstanceConstructorFrame.WriteExpressions() [469] InstanceConstructorFrame.WriteExpressions() [468] InstanceConstructorFrame.WriteExpressions() [467] InstanceConstructorFrame.WriteExpressions() [466] InstanceConstructorFrame.WriteExpressions() [465] InstanceConstructorFrame.WriteExpressions() [464] InstanceConstructorFrame.WriteExpressions() [463] InstanceConstructorFrame.WriteExpressions() [462] InstanceConstructorFrame.WriteExpressions() [461] InstanceConstructorFrame.WriteExpressions() [460] ListAssignmentFrame<IBusinessValidatorFor<User, UserMgmtContext>>.WriteExpressions() InstanceConstructorFrame.WriteExpressions() [459] InstanceConstructorFrame.WriteExpressions() [458] InstanceConstructorFrame.WriteExpressions() [457] InstanceConstructorFrame.WriteExpressions() [456] InstanceConstructorFrame.WriteExpressions() [455] InstanceConstructorFrame.WriteExpressions() [454] InstanceConstructorFrame.WriteExpressions() [453] InstanceConstructorFrame.WriteExpressions() [452] InstanceConstructorFrame.WriteExpressions() [451] InstanceConstructorFrame.WriteExpressions() [450] InstanceConstructorFrame.WriteExpressions() [449] InstanceConstructorFrame.WriteExpressions() [448] InstanceConstructorFrame.WriteExpressions() [447] InstanceConstructorFrame.WriteExpressions() [446] InstanceConstructorFrame.WriteExpressions() [445] InstanceConstructorFrame.WriteExpressions() [444] InstanceConstructorFrame.WriteExpressions() [443] InstanceConstructorFrame.WriteExpressions() [442] InstanceConstructorFrame.WriteExpressions() [441] InstanceConstructorFrame.WriteExpressions() [440] InstanceConstructorFrame.WriteExpressions() [439] InstanceConstructorFrame.WriteExpressions() [438] InstanceConstructorFrame.WriteExpressions() [437] InstanceConstructorFrame.WriteExpressions() [436] InstanceConstructorFrame.WriteExpressions() [435] InstanceConstructorFrame.WriteExpressions() [434] InstanceConstructorFrame.WriteExpressions() [433] InstanceConstructorFrame.WriteExpressions() [432] InstanceConstructorFrame.WriteExpressions() [431] InstanceConstructorFrame.WriteExpressions() [430] InstanceConstructorFrame.WriteExpressions() [429] InstanceConstructorFrame.WriteExpressions() [428] InstanceConstructorFrame.WriteExpressions() [427] InstanceConstructorFrame.WriteExpressions() [426] InstanceConstructorFrame.WriteExpressions() [425] InstanceConstructorFrame.WriteExpressions() [424] InstanceConstructorFrame.WriteExpressions() [423] InstanceConstructorFrame.WriteExpressions() [422] InstanceConstructorFrame.WriteExpressions() [421] InstanceConstructorFrame.WriteExpressions() [420] InstanceConstructorFrame.WriteExpressions() [419] InstanceConstructorFrame.WriteExpressions() [418] InstanceConstructorFrame.WriteExpressions() [417] InstanceConstructorFrame.WriteExpressions() [416] InstanceConstructorFrame.WriteExpressions() [415] InstanceConstructorFrame.WriteExpressions() [414] InstanceConstructorFrame.WriteExpressions() [413] InstanceConstructorFrame.WriteExpressions() [412] InstanceConstructorFrame.WriteExpressions() [411] InstanceConstructorFrame.WriteExpressions() [410] InstanceConstructorFrame.WriteExpressions() [409] InstanceConstructorFrame.WriteExpressions() [408] InstanceConstructorFrame.WriteExpressions() [407] InstanceConstructorFrame.WriteExpressions() [406] InstanceConstructorFrame.WriteExpressions() [405] InstanceConstructorFrame.WriteExpressions() [404] InstanceConstructorFrame.WriteExpressions() [403] InstanceConstructorFrame.WriteExpressions() [402] InstanceConstructorFrame.WriteExpressions() [401] InstanceConstructorFrame.WriteExpressions() [400] InstanceConstructorFrame.WriteExpressions() [399] InstanceConstructorFrame.WriteExpressions() [398] InstanceConstructorFrame.WriteExpressions() [397] InstanceConstructorFrame.WriteExpressions() [396] InstanceConstructorFrame.WriteExpressions() [395] InstanceConstructorFrame.WriteExpressions() [394] InstanceConstructorFrame.WriteExpressions() [393] InstanceConstructorFrame.WriteExpressions() [392] InstanceConstructorFrame.WriteExpressions() [391] InstanceConstructorFrame.WriteExpressions() [390] InstanceConstructorFrame.WriteExpressions() [389] InstanceConstructorFrame.WriteExpressions() [388] InstanceConstructorFrame.WriteExpressions() [387] InstanceConstructorFrame.WriteExpressions() [386] InstanceConstructorFrame.WriteExpressions() [385] InstanceConstructorFrame.WriteExpressions() [384] InstanceConstructorFrame.WriteExpressions() [383] InstanceConstructorFrame.WriteExpressions() [382] InstanceConstructorFrame.WriteExpressions() [381] InstanceConstructorFrame.WriteExpressions() [380] InstanceConstructorFrame.WriteExpressions() [379] InstanceConstructorFrame.WriteExpressions() [378] InstanceConstructorFrame.WriteExpressions() [377] InstanceConstructorFrame.WriteExpressions() [376] InstanceConstructorFrame.WriteExpressions() [375] InstanceConstructorFrame.WriteExpressions() [374] InstanceConstructorFrame.WriteExpressions() [373] InstanceConstructorFrame.WriteExpressions() [372] InstanceConstructorFrame.WriteExpressions() [371] InstanceConstructorFrame.WriteExpressions() [370] InstanceConstructorFrame.WriteExpressions() [369] InstanceConstructorFrame.WriteExpressions() [368] InstanceConstructorFrame.WriteExpressions() [367] InstanceConstructorFrame.WriteExpressions() [366] InstanceConstructorFrame.WriteExpressions() [365] InstanceConstructorFrame.WriteExpressions() [364] InstanceConstructorFrame.WriteExpressions() [363] InstanceConstructorFrame.WriteExpressions() [362] InstanceConstructorFrame.WriteExpressions() [361] InstanceConstructorFrame.WriteExpressions() [360] InstanceConstructorFrame.WriteExpressions() [359] InstanceConstructorFrame.WriteExpressions() [358] InstanceConstructorFrame.WriteExpressions() [357] InstanceConstructorFrame.WriteExpressions() [356] InstanceConstructorFrame.WriteExpressions() [355] InstanceConstructorFrame.WriteExpressions() [354] InstanceConstructorFrame.WriteExpressions() [353] InstanceConstructorFrame.WriteExpressions() [352] InstanceConstructorFrame.WriteExpressions() [351] InstanceConstructorFrame.WriteExpressions() [350] InstanceConstructorFrame.WriteExpressions() [349] InstanceConstructorFrame.WriteExpressions() [348] InstanceConstructorFrame.WriteExpressions() [347] InstanceConstructorFrame.WriteExpressions() [346] InstanceConstructorFrame.WriteExpressions() [345] InstanceConstructorFrame.WriteExpressions() [344] InstanceConstructorFrame.WriteExpressions() [343] InstanceConstructorFrame.WriteExpressions() [342] InstanceConstructorFrame.WriteExpressions() [341] InstanceConstructorFrame.WriteExpressions() [340] InstanceConstructorFrame.WriteExpressions() [339] InstanceConstructorFrame.WriteExpressions() [338] InstanceConstructorFrame.WriteExpressions() [337] InstanceConstructorFrame.WriteExpressions() [336] InstanceConstructorFrame.WriteExpressions() [335] InstanceConstructorFrame.WriteExpressions() [334] InstanceConstructorFrame.WriteExpressions() [333] InstanceConstructorFrame.WriteExpressions() [332] InstanceConstructorFrame.WriteExpressions() [331] InstanceConstructorFrame.WriteExpressions() [330] InstanceConstructorFrame.WriteExpressions() [329] InstanceConstructorFrame.WriteExpressions() [328] InstanceConstructorFrame.WriteExpressions() [327] InstanceConstructorFrame.WriteExpressions() [326] InstanceConstructorFrame.WriteExpressions() [325] InstanceConstructorFrame.WriteExpressions() [324] InstanceConstructorFrame.WriteExpressions() [323] InstanceConstructorFrame.WriteExpressions() [322] InstanceConstructorFrame.WriteExpressions() [321] InstanceConstructorFrame.WriteExpressions() [320] InstanceConstructorFrame.WriteExpressions() [319] InstanceConstructorFrame.WriteExpressions() [318] InstanceConstructorFrame.WriteExpressions() [317] InstanceConstructorFrame.WriteExpressions() [316] InstanceConstructorFrame.WriteExpressions() [315] InstanceConstructorFrame.WriteExpressions() [314] InstanceConstructorFrame.WriteExpressions() [313] InstanceConstructorFrame.WriteExpressions() [312] InstanceConstructorFrame.WriteExpressions() [311] InstanceConstructorFrame.WriteExpressions() [310] InstanceConstructorFrame.WriteExpressions() [309] InstanceConstructorFrame.WriteExpressions() [308] InstanceConstructorFrame.WriteExpressions() [307] InstanceConstructorFrame.WriteExpressions() [306] InstanceConstructorFrame.WriteExpressions() [305] InstanceConstructorFrame.WriteExpressions() [304] InstanceConstructorFrame.WriteExpressions() [303] InstanceConstructorFrame.WriteExpressions() [302] InstanceConstructorFrame.WriteExpressions() [301] InstanceConstructorFrame.WriteExpressions() [300] InstanceConstructorFrame.WriteExpressions() [299] InstanceConstructorFrame.WriteExpressions() [298] InstanceConstructorFrame.WriteExpressions() [297] InstanceConstructorFrame.WriteExpressions() [296] InstanceConstructorFrame.WriteExpressions() [295] InstanceConstructorFrame.WriteExpressions() [294] InstanceConstructorFrame.WriteExpressions() [293] InstanceConstructorFrame.WriteExpressions() [292] InstanceConstructorFrame.WriteExpressions() [291] InstanceConstructorFrame.WriteExpressions() [290] InstanceConstructorFrame.WriteExpressions() [289] InstanceConstructorFrame.WriteExpressions() [288] InstanceConstructorFrame.WriteExpressions() [287] InstanceConstructorFrame.WriteExpressions() [286] InstanceConstructorFrame.WriteExpressions() [285] InstanceConstructorFrame.WriteExpressions() [284] InstanceConstructorFrame.WriteExpressions() [283] InstanceConstructorFrame.WriteExpressions() [282] InstanceConstructorFrame.WriteExpressions() [281] InstanceConstructorFrame.WriteExpressions() [280] InstanceConstructorFrame.WriteExpressions() [279] InstanceConstructorFrame.WriteExpressions() [278] InstanceConstructorFrame.WriteExpressions() [277] InstanceConstructorFrame.WriteExpressions() [276] InstanceConstructorFrame.WriteExpressions() [275] InstanceConstructorFrame.WriteExpressions() [274] InstanceConstructorFrame.WriteExpressions() [273] InstanceConstructorFrame.WriteExpressions() [272] InstanceConstructorFrame.WriteExpressions() [271] InstanceConstructorFrame.WriteExpressions() [270] InstanceConstructorFrame.WriteExpressions() [269] InstanceConstructorFrame.WriteExpressions() [268] InstanceConstructorFrame.WriteExpressions() [267] InstanceConstructorFrame.WriteExpressions() [266] InstanceConstructorFrame.WriteExpressions() [265] InstanceConstructorFrame.WriteExpressions() [264] InstanceConstructorFrame.WriteExpressions() [263] InstanceConstructorFrame.WriteExpressions() [262] InstanceConstructorFrame.WriteExpressions() [261] InstanceConstructorFrame.WriteExpressions() [260] InstanceConstructorFrame.WriteExpressions() [259] InstanceConstructorFrame.WriteExpressions() [258] InstanceConstructorFrame.WriteExpressions() [257] InstanceConstructorFrame.WriteExpressions() [256] InstanceConstructorFrame.WriteExpressions() [255] InstanceConstructorFrame.WriteExpressions() [254] InstanceConstructorFrame.WriteExpressions() [253] InstanceConstructorFrame.WriteExpressions() [252] InstanceConstructorFrame.WriteExpressions() [251] InstanceConstructorFrame.WriteExpressions() [250] InstanceConstructorFrame.WriteExpressions() [249] InstanceConstructorFrame.WriteExpressions() [248] InstanceConstructorFrame.WriteExpressions() [247] InstanceConstructorFrame.WriteExpressions() [246] InstanceConstructorFrame.WriteExpressions() [245] InstanceConstructorFrame.WriteExpressions() [244] InstanceConstructorFrame.WriteExpressions() [243] InstanceConstructorFrame.WriteExpressions() [242] InstanceConstructorFrame.WriteExpressions() [241] InstanceConstructorFrame.WriteExpressions() [240] InstanceConstructorFrame.WriteExpressions() [239] InstanceConstructorFrame.WriteExpressions() [238] InstanceConstructorFrame.WriteExpressions() [237] InstanceConstructorFrame.WriteExpressions() [236] InstanceConstructorFrame.WriteExpressions() [235] InstanceConstructorFrame.WriteExpressions() [234] InstanceConstructorFrame.WriteExpressions() [233] InstanceConstructorFrame.WriteExpressions() [232] InstanceConstructorFrame.WriteExpressions() [231] InstanceConstructorFrame.WriteExpressions() [230] InstanceConstructorFrame.WriteExpressions() [229] InstanceConstructorFrame.WriteExpressions() [228] InstanceConstructorFrame.WriteExpressions() [227] InstanceConstructorFrame.WriteExpressions() [226] InstanceConstructorFrame.WriteExpressions() [225] InstanceConstructorFrame.WriteExpressions() [224] InstanceConstructorFrame.WriteExpressions() [223] InstanceConstructorFrame.WriteExpressions() [222] InstanceConstructorFrame.WriteExpressions() [221] InstanceConstructorFrame.WriteExpressions() [220] InstanceConstructorFrame.WriteExpressions() [219] InstanceConstructorFrame.WriteExpressions() [218] InstanceConstructorFrame.WriteExpressions() [217] InstanceConstructorFrame.WriteExpressions() [216] InstanceConstructorFrame.WriteExpressions() [215] InstanceConstructorFrame.WriteExpressions() [214] InstanceConstructorFrame.WriteExpressions() [213] InstanceConstructorFrame.WriteExpressions() [212] InstanceConstructorFrame.WriteExpressions() [211] InstanceConstructorFrame.WriteExpressions() [210] InstanceConstructorFrame.WriteExpressions() [209] InstanceConstructorFrame.WriteExpressions() [208] InstanceConstructorFrame.WriteExpressions() [207] InstanceConstructorFrame.WriteExpressions() [206] InstanceConstructorFrame.WriteExpressions() [205] InstanceConstructorFrame.WriteExpressions() [204] InstanceConstructorFrame.WriteExpressions() [203] InstanceConstructorFrame.WriteExpressions() [202] InstanceConstructorFrame.WriteExpressions() [201] InstanceConstructorFrame.WriteExpressions() [200] InstanceConstructorFrame.WriteExpressions() [199] InstanceConstructorFrame.WriteExpressions() [198] InstanceConstructorFrame.WriteExpressions() [197] InstanceConstructorFrame.WriteExpressions() [196] InstanceConstructorFrame.WriteExpressions() [195] InstanceConstructorFrame.WriteExpressions() [194] InstanceConstructorFrame.WriteExpressions() [193] InstanceConstructorFrame.WriteExpressions() [192] InstanceConstructorFrame.WriteExpressions() [191] InstanceConstructorFrame.WriteExpressions() [190] InstanceConstructorFrame.WriteExpressions() [189] InstanceConstructorFrame.WriteExpressions() [188] InstanceConstructorFrame.WriteExpressions() [187] InstanceConstructorFrame.WriteExpressions() [186] InstanceConstructorFrame.WriteExpressions() [185] InstanceConstructorFrame.WriteExpressions() [184] InstanceConstructorFrame.WriteExpressions() [183] InstanceConstructorFrame.WriteExpressions() [182] InstanceConstructorFrame.WriteExpressions() [181] InstanceConstructorFrame.WriteExpressions() [180] InstanceConstructorFrame.WriteExpressions() [179] InstanceConstructorFrame.WriteExpressions() [178] InstanceConstructorFrame.WriteExpressions() [177] InstanceConstructorFrame.WriteExpressions() [176] InstanceConstructorFrame.WriteExpressions() [175] InstanceConstructorFrame.WriteExpressions() [174] InstanceConstructorFrame.WriteExpressions() [173] InstanceConstructorFrame.WriteExpressions() [172] InstanceConstructorFrame.WriteExpressions() [171] InstanceConstructorFrame.WriteExpressions() [170] InstanceConstructorFrame.WriteExpressions() [169] InstanceConstructorFrame.WriteExpressions() [168] InstanceConstructorFrame.WriteExpressions() [167] InstanceConstructorFrame.WriteExpressions() [166] InstanceConstructorFrame.WriteExpressions() [165] InstanceConstructorFrame.WriteExpressions() [164] InstanceConstructorFrame.WriteExpressions() [163] InstanceConstructorFrame.WriteExpressions() [162] InstanceConstructorFrame.WriteExpressions() [161] InstanceConstructorFrame.WriteExpressions() [160] InstanceConstructorFrame.WriteExpressions() [159] InstanceConstructorFrame.WriteExpressions() [158] InstanceConstructorFrame.WriteExpressions() [157] InstanceConstructorFrame.WriteExpressions() [156] InstanceConstructorFrame.WriteExpressions() [155] InstanceConstructorFrame.WriteExpressions() [154] InstanceConstructorFrame.WriteExpressions() [153] InstanceConstructorFrame.WriteExpressions() [152] InstanceConstructorFrame.WriteExpressions() [151] InstanceConstructorFrame.WriteExpressions() [150] InstanceConstructorFrame.WriteExpressions() [149] InstanceConstructorFrame.WriteExpressions() [148] InstanceConstructorFrame.WriteExpressions() [147] InstanceConstructorFrame.WriteExpressions() [146] InstanceConstructorFrame.WriteExpressions() [145] InstanceConstructorFrame.WriteExpressions() [144] InstanceConstructorFrame.WriteExpressions() [143] InstanceConstructorFrame.WriteExpressions() [142] InstanceConstructorFrame.WriteExpressions() [141] InstanceConstructorFrame.WriteExpressions() [140] InstanceConstructorFrame.WriteExpressions() [139] InstanceConstructorFrame.WriteExpressions() [138] InstanceConstructorFrame.WriteExpressions() [137] InstanceConstructorFrame.WriteExpressions() [136] InstanceConstructorFrame.WriteExpressions() [135] InstanceConstructorFrame.WriteExpressions() [134] InstanceConstructorFrame.WriteExpressions() [133] InstanceConstructorFrame.WriteExpressions() [132] InstanceConstructorFrame.WriteExpressions() [131] InstanceConstructorFrame.WriteExpressions() [130] InstanceConstructorFrame.WriteExpressions() [129] InstanceConstructorFrame.WriteExpressions() [128] InstanceConstructorFrame.WriteExpressions() [127] InstanceConstructorFrame.WriteExpressions() [126] InstanceConstructorFrame.WriteExpressions() [125] InstanceConstructorFrame.WriteExpressions() [124] InstanceConstructorFrame.WriteExpressions() [123] InstanceConstructorFrame.WriteExpressions() [122] InstanceConstructorFrame.WriteExpressions() [121] InstanceConstructorFrame.WriteExpressions() [120] InstanceConstructorFrame.WriteExpressions() [119] InstanceConstructorFrame.WriteExpressions() [118] InstanceConstructorFrame.WriteExpressions() [117] InstanceConstructorFrame.WriteExpressions() [116] InstanceConstructorFrame.WriteExpressions() [115] InstanceConstructorFrame.WriteExpressions() [114] InstanceConstructorFrame.WriteExpressions() [113] InstanceConstructorFrame.WriteExpressions() [112] InstanceConstructorFrame.WriteExpressions() [111] InstanceConstructorFrame.WriteExpressions() [110] InstanceConstructorFrame.WriteExpressions() [109] InstanceConstructorFrame.WriteExpressions() [108] InstanceConstructorFrame.WriteExpressions() [107] InstanceConstructorFrame.WriteExpressions() [106] InstanceConstructorFrame.WriteExpressions() [105] InstanceConstructorFrame.WriteExpressions() [104] InstanceConstructorFrame.WriteExpressions() [103] InstanceConstructorFrame.WriteExpressions() [102] InstanceConstructorFrame.WriteExpressions() [101] InstanceConstructorFrame.WriteExpressions() [100] InstanceConstructorFrame.WriteExpressions() [99] InstanceConstructorFrame.WriteExpressions() [98] InstanceConstructorFrame.WriteExpressions() [97] InstanceConstructorFrame.WriteExpressions() [96] InstanceConstructorFrame.WriteExpressions() [95] InstanceConstructorFrame.WriteExpressions() [94] InstanceConstructorFrame.WriteExpressions() [93] InstanceConstructorFrame.WriteExpressions() [92] InstanceConstructorFrame.WriteExpressions() [91] InstanceConstructorFrame.WriteExpressions() [90] InstanceConstructorFrame.WriteExpressions() [89] InstanceConstructorFrame.WriteExpressions() [88] InstanceConstructorFrame.WriteExpressions() [87] InstanceConstructorFrame.WriteExpressions() [86] InstanceConstructorFrame.WriteExpressions() [85] InstanceConstructorFrame.WriteExpressions() [84] InstanceConstructorFrame.WriteExpressions() [83] InstanceConstructorFrame.WriteExpressions() [82] InstanceConstructorFrame.WriteExpressions() [81] InstanceConstructorFrame.WriteExpressions() [80] InstanceConstructorFrame.WriteExpressions() [79] InstanceConstructorFrame.WriteExpressions() [78] InstanceConstructorFrame.WriteExpressions() [77] InstanceConstructorFrame.WriteExpressions() [76] InstanceConstructorFrame.WriteExpressions() [75] InstanceConstructorFrame.WriteExpressions() [74] InstanceConstructorFrame.WriteExpressions() [73] InstanceConstructorFrame.WriteExpressions() [72] InstanceConstructorFrame.WriteExpressions() [71] InstanceConstructorFrame.WriteExpressions() [70] InstanceConstructorFrame.WriteExpressions() [69] InstanceConstructorFrame.WriteExpressions() [68] InstanceConstructorFrame.WriteExpressions() [67] InstanceConstructorFrame.WriteExpressions() [66] InstanceConstructorFrame.WriteExpressions() [65] InstanceConstructorFrame.WriteExpressions() [64] InstanceConstructorFrame.WriteExpressions() [63] InstanceConstructorFrame.WriteExpressions() [62] InstanceConstructorFrame.WriteExpressions() [61] InstanceConstructorFrame.WriteExpressions() [60] InstanceConstructorFrame.WriteExpressions() [59] InstanceConstructorFrame.WriteExpressions() [58] InstanceConstructorFrame.WriteExpressions() [57] InstanceConstructorFrame.WriteExpressions() [56] ListAssignmentFrame<IBusinessValidatorFor<TermAgreement, TermAgreementContext>>.WriteExpressions() InstanceConstructorFrame.WriteExpressions() [55] InstanceConstructorFrame.WriteExpressions() [54] InstanceConstructorFrame.WriteExpressions() [53] InstanceConstructorFrame.WriteExpressions() [52] InstanceConstructorFrame.WriteExpressions() [51] InstanceConstructorFrame.WriteExpressions() [50] InstanceConstructorFrame.WriteExpressions() [49] InstanceConstructorFrame.WriteExpressions() [48] InstanceConstructorFrame.WriteExpressions() [47] InstanceConstructorFrame.WriteExpressions() [46] InstanceConstructorFrame.WriteExpressions() [45] InstanceConstructorFrame.WriteExpressions() [44] InstanceConstructorFrame.WriteExpressions() [43] InstanceConstructorFrame.WriteExpressions() [42] InstanceConstructorFrame.WriteExpressions() [41] InstanceConstructorFrame.WriteExpressions() [40] InstanceConstructorFrame.WriteExpressions() [39] InstanceConstructorFrame.WriteExpressions() [38] InstanceConstructorFrame.WriteExpressions() [37] InstanceConstructorFrame.WriteExpressions() [36] InstanceConstructorFrame.WriteExpressions() [35] InstanceConstructorFrame.WriteExpressions() [34] InstanceConstructorFrame.WriteExpressions() [33] InstanceConstructorFrame.WriteExpressions() [32] InstanceConstructorFrame.WriteExpressions() [31] InstanceConstructorFrame.WriteExpressions() [30] InstanceConstructorFrame.WriteExpressions() [29] InstanceConstructorFrame.WriteExpressions() [28] InstanceConstructorFrame.WriteExpressions() [27] InstanceConstructorFrame.WriteExpressions() [26] InstanceConstructorFrame.WriteExpressions() [25] InstanceConstructorFrame.WriteExpressions() [24] InstanceConstructorFrame.WriteExpressions() [23] InstanceConstructorFrame.WriteExpressions() [22] InstanceConstructorFrame.WriteExpressions() [21] InstanceConstructorFrame.WriteExpressions() [20] ListAssignmentFrame<IBusinessValidatorFor<UserTermAgreement, UserTermAgreementContext>>.WriteExpressions() InstanceConstructorFrame.WriteExpressions() [19] InstanceConstructorFrame.WriteExpressions() [18] InstanceConstructorFrame.WriteExpressions() [17] InstanceConstructorFrame.WriteExpressions() [16] InstanceConstructorFrame.WriteExpressions() [15] InstanceConstructorFrame.WriteExpressions() [14] InstanceConstructorFrame.WriteExpressions() [13] InstanceConstructorFrame.WriteExpressions() [12] InstanceConstructorFrame.WriteExpressions() [11] InstanceConstructorFrame.WriteExpressions() [10] InstanceConstructorFrame.WriteExpressions() [9] InstanceConstructorFrame.WriteExpressions() [8] InstanceConstructorFrame.WriteExpressions() [7] InstanceConstructorFrame.WriteExpressions() [6] InstanceConstructorFrame.WriteExpressions() [5] InstanceConstructorFrame.WriteExpressions() [4] InstanceConstructorFrame.WriteExpressions() [3] InstanceConstructorFrame.WriteExpressions() [2] InstanceConstructorFrame.WriteExpressions() [1] FuncResolverDefinition.BuildResolver() GeneratedInstance.BuildFuncResolver() GeneratedInstance.buildResolver() GeneratedInstance.ToResolver() ConstructorInstance.ToResolver() ServiceGraph.FindResolver() Scope.GetInstance() at IoCContainer.GetInstance() at DependencyInjectionMvcControllerFactory.GetControllerInstance() DefaultControllerFactory.CreateController() MvcHandler.ProcessRequestInit() MvcHandler.BeginProcessRequest() MvcHandler.BeginProcessRequest() MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest() HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() HttpApplication.<>c__DisplayClass285_0.<ExecuteStepImpl>b__0() HttpApplication.StepInvoker.Invoke() [3] HttpApplication.StepInvoker.<>c__DisplayClass4_0.<Invoke>b__0() [2] TelemetryCorrelationHttpModule.OnExecuteRequestStep() HttpApplication.<>c__DisplayClass284_0.<OnExecuteRequestStep>b__0() [2] HttpApplication.StepInvoker.Invoke() [2] HttpApplication.StepInvoker.<>c__DisplayClass4_0.<Invoke>b__0() [1] ApplicationInsightsHttpModule.OnExecuteRequestStep() at /_/WEB/Src/Web/Web/ApplicationInsightsHttpModule.cs:line 164 HttpApplication.<>c__DisplayClass284_0.<OnExecuteRequestStep>b__0() [1] HttpApplication.StepInvoker.Invoke() [1] HttpApplication.ExecuteStepImpl() HttpApplication.ExecuteStep() HttpApplication.PipelineStepManager.ResumeSteps() HttpApplication.ResumeSteps() HttpApplication.BeginProcessRequestNotification() HttpRuntime.ProcessRequestNotificationPrivate() HttpRuntime.ProcessRequestNotification() PipelineRuntime.ProcessRequestNotificationHelper() [2] PipelineRuntime.ProcessRequestNotification() [2] [Managed to Native Transition] PipelineRuntime.ProcessRequestNotificationHelper() [1] PipelineRuntime.ProcessRequestNotification() [1] [Application Domain Transition]

jeremydmiller commented 3 years ago

Look for whatever implements the IBusinessValidatorFor<User, UserMgmtContext> interface, and count the constructor arguments to get to the position that blew up on the hash code thing.

Have you tried AssertContainerIsValid() on this thing btw? And why would you have a class that has 70 some constructor args? Is this generated code?

cribeiro84 commented 3 years ago

Thanks @jeremydmiller for the tips, I've looked into the IBusinessValidatorFor<User, UserMgmtContext> interface but I didn't find any irregular thing. Most of the implementations have parameterless constructors and only two cases that injects a small Data Access component that doesn't have any relationship. The AssertConfigurationIsValid is passing normally (ConfigOnly mode).

"Funny" thing, if I start debugging with Rider, it throws the StackOverflowException right on the first request but if I do the same with VS2019, it only breaks on the controller that references the interface with that big number of dependencies. Answering your question, this specific case is a very complex feature that relies on several other components and data components for validations. It's not in a good shape but it was working fine so far with StructureMap (latest version). However, I'm adding to my backlog to review this monster to avoid future issues.

Another important thing that's happening is Lamar is taking way longer to add all services comparing to StructureMap, it's around 2 minutes and StructureMap usually takes 30 seconds. I have a feeling that Lamar is not working well with legacy ASP.NET MVC based on .NET 4.8 with IISEXPRESS. I'm not able to test in a ASP.NET Core WebApp due some dependencies on .NET 4.8 that we are still working on.

cribeiro84 commented 3 years ago

@jeremydmiller I've downloaded and referenced the Lamar projects to my solution to check whether I could debug it with more freedom. Now I'm getting the StackOverflowException in another place. When Lamar is trying to instantiate the dependencies, it throwing inside of a FluentValidation validator class (sample below - at line: MessengerComponentResource.errorAttachmentNameEmpty) where it gets a string from a Resource. If I replace the Resource by a literal string, it passes. Any guess about what could be the reason? It seems to be related to the issue you mentioned about the IBusinessValidatorFor<User, UserMgmtContext> exception, it's not clear why it does that.

Sample

public SaveIsAttachmentNameEmptyValidator
            ()
            : base (ExecOrderConstants.EXEC_ORDER_002)
        {

            // Add the attachment name validation.
            base.RuleSet
                (
                    IS_ATTACH_NAME_EMPTY,
                     () => base.RuleFor(attach => attach.AttachmentName)
                              .NotEmpty()
                              .WithMessage(MessengerComponentResource.errorAttachmentNameEmpty)
                );

            // Save the mappings between contexts, and their names.
            base.functionContextAndRuleNamesDictionary.Add (MessageAttachmentMgmtContext.CreateNewMessageAttachment, IS_ATTACH_NAME_EMPTY);

            // Set the descripter;
            base.ActivityDescripterForLogging = ACTIVTY_DESCRIPTER;
        }
jeremydmiller commented 3 years ago

Sorry, now you're going to have to go to the FluentValidation folks. I don't know why that would cause an SOE though.

cribeiro84 commented 3 years ago

@jeremydmiller - the problem is not there. I was debugging so far the Lamar source code to try to check if it's going into an endless loop. At this moment, I've identified what's happening and where it's breaking, there is no directly relation with Resource or FluentValidation.

Here is the case:

` public void WriteExpressions(LambdaDefinition definition) { var isDisposed = BuiltType.CanBeCastTo();

        var callCtor = Expression.New(Ctor, Parameters.Select(definition.ExpressionFor));

        if (Next == null && !isDisposed && !Setters.Any())
        {
            definition.Body.Add(callCtor);
        }
        else
        {
            var variableExpr = Expression.Parameter(BuiltType, Variable.Usage);
            definition.RegisterExpression(Variable, variableExpr);
            definition.Assign(variableExpr, callCtor);

            foreach (var setter in Setters)
            {
                var setMethod = BuiltType.GetProperty(setter.PropertyName).SetMethod;

                var value = definition.ExpressionFor(setter.Variable);
                var call = Expression.Call(variableExpr, setMethod, value);
                definition.Body.Add(call);
            }

            if (isDisposed)
            {
                definition.RegisterDisposable(variableExpr, Variable.VariableType);
            }

            if (Next == null)
            {
                definition.Body.Add(definition.ExpressionFor(Variable));
            }
            else
            {
                **if (Next is IResolverFrame next)
                {
                    next.WriteExpressions(definition);
                }**
                else
                {
                    throw new InvalidCastException($"{Next.GetType().GetFullName()} does not implement {nameof(IResolverFrame)}");
                }   
            }
        }

`

I'm still debugging to try to understand the whole process.

cribeiro84 commented 3 years ago

Just an update from my debugging sessions. I've found out that one Mvc Controller instance creation is generating 1878 "frames" of dependencies/variables. I've looked into our code and it doesn't seem to have this number of indirect dependencies to create this controller. I couldn't find yet if this should happen or the library is finding more dependencies than it should.

sszakal commented 3 years ago

I'm having the exact same issue. The call stack looks almost the same, Rider crashes only when running with the debugger, in release mode it actually works. On the other hand Visual Studio seems to be working fine even when debugging. Is there a fix around this?

jeremydmiller commented 3 years ago

@sszakal Do you have any way of creating reproduction steps?

sszakal commented 3 years ago

@jeremydmiller I can reproduce it all the time on the solution that I'm working on, unfortunately I can't share the source code. I will try to debug myself, or reproduce it on a new .net project/solution.

eterekhin commented 3 years ago

Seems this can be fixed by rewriting InstanceConstructorFrame.WriteExpressions w/o recursive calls

image

If you are getting the SOE, please make that "Disable JIT optimizations on module load" option is turned off (Rider 2021.2)

image

If you use VS check that "Suppress JIT optimizations on module load" is turned off

The reason for the SOE is that if debugger forces JIT not to apply optimizations JIT is not allowed to get rid of this recursion. With optimizations JIT will use a loop instead of recursion calls. To verify this, add a breakpoint like in the screenshot. You will notice, that you'll stay at the same frame with JIT optimizations enabled. Otherwise, you'll see a recursion:

image

repro: LamarTest.zip

jeremydmiller commented 2 years ago

No recent activity, and I don't see anything actionable here.

GabrielEquusoftware commented 2 weeks ago

I'm also hitting this.

@eterekhin sums it up and provides a solution.