OpenRasta release notes
Beta 2
Visual Studio integration
- OpenRasta now provides default projects and default templates for running asp.net based projects.
Build
- The build has been changed slightly to not run the unit and integration tests upon launching make.bat, to try and get the first checkout experience smoother.
Extensibility
- A new interceptor API has been implemented, enabling easier platform-wide and per-operation filters, both for pre and post notification and for actual operation rewriting.
- A new DefaultDependencyRegistrar? class and associated IDependencyRegistrar have been created to let users add and remove the default components of OpenRasta before the configuration is executed.
- The execution of operations now go through an operation model. This new api enables new extensibility scenarios, letting user override the default operation selection order, execution, etc.
- It is now possible to have multiple handlers registered for a single resource (although not possible through the registration api yet).
Configuration
- The fluent configuration has been rewritten and now generates a configuration metamodel. New metamodel handlers can execute and modify the metamodel before openrasta gets configured
- The fluent API has been rewritten and cleaned-up a bit, with a few syntax changes (.AndTranscodedBy will for example now be .And.TranscodedBy). Extension methods ensure compatibility
- A new method has been added to ResourceSpace?.Uses, to let you register your own component in the container without registering them in the container yourself.
Logging
- There's a new ILogger<LogSource?> logger that will enable multiple trace sources to be logged and identified separately.
Hosting
- New Hosting infrastucture letting you host OpenRasta in-memory, in-process using http.sys hosting, or in asp.net.
Type system
- The whole of the openrasta pipeline is now type agnostic, and relies on the ITypeSystem interface for creating and manipulating types. This makes for a much cleaner API than what was present in beta 1.
- The type surrogate for IList has been modified from creating sparse lists to adding objects to the list, making common reordering of items in a form automatically reorder a collection being received.
Binders
- The binder API has been updated. Now every operation member (aka parameter) will go through a binder, even when the codec isn't a key value pairs generator.
Codecs
- The multipart/form-data codec has been split in two codecs, one for key/values, one for full object instantiations.
Pipeline
- The pipeline ordering is now using a new dependency tree, which makes for a much cleaner and easier to maintain operation.
- The ordering of contributors is now handled through the new Notify(Method).Before and After methods. The ExecuteBefore / ExecuteAfter methods will be depreciated in the next release.
- The various pipeline contributors have now been decoupled. Registration of ordering is now usually done on the KnownStages.Ixx interfaces, letting developers replace a pipeline stage without impacting the other contributors.
Asp.net support
- The hosting and the webforms support have been split in two different assemblies, enabling the use of webforms outside of asp.net
- The Http modules and handlers have changed namespaces to OpenRasta.Hosting.AspNet?
Asp.net hosting
- The HistoryStream? has been added back to the pipeline, correcting multiple issues due to the streaming nature of the multipart/form-data codec
Asp.net webforms codec
- There is now an extensible csharp compiler for webforms, letting you use a new type of syntax in your pages.
- The result of a <%= %> tag will now be html encoded by default.
- Thanks to the extensibility support, a new syntax <%=(x) %> has been introduced, with x being a shorthand for the type of output.
- Raw output can be rendered using <%=(r) %>
- The OpenRastaPageParserFilter? has been updated to support custom base types, and to rewire Titles and other properties correctly. Those were being shadowed by the markup support in the base ResourceView? classes.
- When specifying multiple views, when a uri is named (through the AtUri("/).Named("uriName"), the view with a matching name will now be selected by default, and fallback to the index view when not present.
Markup support
- All non-legacy xhtml 1.1 modules have been implemented fully. From any ResourceView? page, you can now do <%= div.Id("myId")[a.Href("http://...")["A link"]] %>
- A new id stacking component has been added, letting markup providers push a "prefix" on the stack for form names.
- There are a few more markup helpers for common controls: CheckBox? and Select.
- SharpView? can now be used using the <%=(s) %> syntax.
- The If and ForEach? methods are now capable of nesting, so enumerations within enumerations are supported.
- The ForEach? method uses the new id stacking to push the current item on the stack. Hence, <%=(s) Xhtml.TextBox(()=> Resource.Customers.Current().Name) %> will correctly generate the name="MyResourceType.Customers:0.Name".
