Released Catel 3.6
ServiceLocator and TypeFactory improvements
Circular dependency protection
In this version we added circular dependency protection to the TypeFactory. This means that if there are types with a circular dependency using dependency injection, the TypeFactory will throw a CircularDependencyException with the exact type path which was used to create the type instead of a StackOverflow without any info. As you can see in the image below, when a dependency causes a circular dependency, you will now get an exception with really useful information (check out the TypePath).
Moved generic methods to extensions methods
We moved the generic methods such as ResolveType<TInterface>() to extension methods. They were already calling the non-generic parameters. This way if someone wants to implement his/her own ServiceLocator or TypeFactory, he/she doesn’t have to write all the extension methods (since they are called on the IServiceLocator and ITypeFactory).
Improved support for external container synchronization
Catel is the only framework that supports IoC container synchronization between containers (for example, with MEF or Unity). This version improves the way the synchronization handles both singleton and transient registrations between external containers. We also made a few performance improvements to the synchronization.
Added new services
There were several new services added.
This service works in the same manner as the SaveFileService and OpenFileService. It allows a user to select a directory in WPF.
This service allows a developer to export a specific view based on the view model. To export a view based on a view model, use the following code:
var viewExportService = GetService<IViewExportService>();
In this release we also focused a lot on performance. Upgrading from an older version to 3.6 should provide a significant performance improvement.
Among these changes were disabling the reflection cache (was actually slower), disabling the default subscription to MessageMediator (see CTL-74) and the introduction of the IDependencyPropertySelector. For more information about
performance, please check out the performance considerations in the documentation.
Fixed unreliable Loaded events in non-WPF technologies (Silverlight, Windows Phone and WinRT)
In WPF, the user controls are loaded from top => bottom. In other technologies these are random and unreliable. In version 3.6 we wrote the FrameworkElementLoadedManager to ensure that Loaded events in Catel are always reliable. This means that no matter what technology is used, the Loaded event is always fired from top => bottom in the visual tree.