-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow configuring or detecting current UI framework to avoid exceptions during dependency registrations #2395
Comments
This isn't a bug. It's scanning for DLL from common rxui nuget package. There are plans to make the init more obvious in the future. So essentially we scan each common DLL we have in the framework since we don't know which nuget packages are installed. Going to close for now but there is a issue for tracking init changes you may want to track. |
But at the place where the scanning happens, isn't it possible to check which assemblies are loaded and only hook up the ones that are present? |
They wouldn't necessarily be loaded since assemblies are lazy loaded. |
If you're referring to #1737, being able to call an init method per framework as per the latest comment sounds great. I don't know how long-lead this work is since it's been open for a while now. If it would be accepted, I wouldn't mind writing the pull request for a method which you could call before RxApp is statically constructed, which would initialize the namespaces array to only the ones that would work by listing the frameworks you want (and if the method wasn't called, it would behave the same as today); I understand if this would be considered contrary to the larger init effort though. |
There's been a bit of work done on init but that being said if you have a way of making the exception happen a pr would be accepted since it'll avoid some support time for us from people being confused while we are doing the init work. |
The way of making the exception happen is:
Most people don't run with Break When Thrown all the time and it's certainly not the default. I do it often when working with WPF code because I've seen my fair share of latent bugs, where code I've written in WPF UI code has thrown, but that exception has been swallowed by WPF in the interest of keeping the app going, like during bindings, type conversions and so on. Those bugs are very hard to find otherwise, and in some cases ended up being shipped. |
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
Is your feature request related to a problem? Please describe.
When I start up my ReactiveUI WPF project in the debugger and have exceptions set to always break on first throw (which is very helpful sometimes), I always see a number of FileNotFoundExceptions thrown in assembly loading, because of DependencyResolverMixins.InitializeReactiveUI making sure that all dependencies for all UI frameworks are registered. (This line is where the throwing originates.)
Describe the solution you'd like
For registrations to not happen which would always knowably result in exceptions being thrown. At most half of them could be loaded at the same time (WPF, WinForms and Drawing) - the registration path has to always go down 3-5 blind alleys every launch for every ReactiveUI application. Not having all UI frameworks ReactiveUI supports loaded in every application is the opposite of exceptional (and it's the result of vexing exceptions being handled down the stack), so if possible the exceptions should be avoided.
Describe alternatives you've considered
I'm seeing this because I have exceptions break on first throw and I could turn it off. I have a habit of having it enabled since WPF is spectacular about swallowing exceptions, and I'd rather know. This issue is mainly about developer ergonomics for me. There are performance implications to both throwing the exceptions and whatever other work happens on the road to those exceptions being thrown, but that's not my primary issue.
Describe suggestions on how to achieve the feature
For ReactiveUI to detect which assemblies are loaded by that time (AppDomain.CurrentDomain.GetAssemblies()) and opt into the namespaces to register based on that. Maybe there's a timing problem where the assemblies may not yet have loaded. In that case, being able to somehow provide a list of which UI frameworks would be good.
Additional context
Stepping past these exceptions takes 8-12 seconds, about as much as disabling and re-enabling first-throw exception breaking. Over a day of stopping and starting my program it really adds up.
I would have worked on a solution but I don't have domain knowledge about how this works for all the UI frameworks - this seems like an internals thing that should be idiomatic to the codebase.
The text was updated successfully, but these errors were encountered: