PDA

View Full Version : ExtDirect stack based on Castle Framework (.NET) /w .NET 4 Support



aritchie
23 Apr 2010, 4:45 AM
Homepage: http://code.google.com/p/acrextdirect/
Binaries: http://acrextdirect.googlecode.com/files/Acr.ExtDirect-2.3.1.0.zip
Source (SVN): http://acrextdirect.googlecode.com/svn/trunk/
Documentation: http://code.google.com/p/acrextdirect/wiki/Documentation

This ExtDirect stack was developed to be as extensible as possible and give all the goodness of the Castle Framework IoC/DI.

Features

Supports native Inversion of Control (IoC) & Dependency Injection (DI) out of the box thanks to the castle framework!
Send simple types, complex types, nullable types, etc. No need to work with JObject, JToken, or formatted strings!
Method resolution can be done serveral ways

Using WCF style attributes [ServiceContract], [OperationContract]
Without using any attributes! Use convention or windsor XML configuration to mark your direct services thus eliminating the need to dirty your business layer with any additional attributes!

Return IQueryable<> directly from your code and have it auto-paginated & dynamically filtered
Handles Form POST Data Binding (simple, complex, & array types)
.NET 4.0 Support. Supports dynamic object types



Getting Started

1) Register the facility in your Windsor container

<facility id="extdirect.facility” type=”Acr.ExtDirect.ExtDirectFacility, Acr.ExtDirect” />

2) Register your components (note that id is also the call name you will use from the ExtJS client)

<component id="yourid" service="IYourService" type="YourImplementation" />

3) Mark your component service OR implementation class with [DirectService]

4) Mark methods in your component service OR implementation class with the [DirectMethod] attribute. For form submit or load methods, mark them [DirectMethod(DirectMethodType.FormSubmit)] or [DirectMethod(DirectMethodType.FormLoad)]

5) Register the HTTP Handler in web.config (note that you can name the path anything you want that registers with ASP.NET. Router requests will go to this url!)

<add path="api.ashx" verb="*" type="Acr.ExtDirect.ExtDirectHandler, Acr.ExtDirect" />

6) Lastly, place the script tag on your page (note that this should be placed under the ExtJS scripts as it auto registers the namespace with ExtDirect!)

<script type="text/javascript" src="api.ashx"></script>

UPDATES
[2.3.1.0]

Improvements
------------
- Hybrid date/time json converter to deal with dates often coming in from components as string representations and needing to go out as
date objects. This is mix between IsoDateConverter for incoming & JavaScriptDateConverter for outgoing

Bugfixes
--------
- No longer messes up exception stack trace if error is thrown from service
- DefaultFormBinder will now work properly with all structs that do not have a form binder
- DefaultFormBinder will not attempt to instantiate objects without a parameterless constructor. This is necessary to bypass any custom
DTO's that contain complex arrays that do not have custom form binders
- Now grabbing proper formbinder instead of possibly grabbing the DefaultFormBinder


[2.3.0.0]
Features
--------
- Initial .NET4 Support - Use of dynamic for both form binders and direct parameters
- Queryable Method Transformer now supports select clause

Improvements
------------
- BREAKING - renamed method appliers to method transformers to better explain what they do
- disableDefaultAppliers renamed to disableDefaultTransformers
- GetNamespace implementation is now smarter in dealing with "unnamed/default" components. Usually from Component.For<>. No one
ever really puts .Named(""). Since Blah.Blah is not allowed in the ExtDirect actions js, it will takes the last string in the . split.


[2.2.0.0]

Features
--------
- New cross-server prevention mechanism. If referrer is not within the same domain, the request is blocked. This feature is disabled by default. <preventCrossSiteRequests>

Improvements
------------
- BREAKING - IFormBinder no longer handles single types. The interface now exposes CanConvert(Type)
- MINOR BREAKING - SelfBindAttribute is deprecated. Objects that inherit implement ISelfFormBind will now be called without the parameter
attribute being marked with [SelfBind]
- Simplified AutoMapping codepath
- Cleaned up & simplified formbinder registration
- Queryable attribute renamed to QueryableMethod to prevent namespace collision
- Added string resources to make debugging multilingual (translations needed)

Bugfixes
--------
- Enum handling /w nullables in method arguments for both form & direct operations
- skipDefaultAppliers is now disableDefaultAppliers



[2.1.0.0]

New Features
------------
- ExceptionContext now contains a reference to the erroring DirectMethodInfo
- EnumStringConverter is now set as default converter
- Types can now be automapped using kernel.AutoRegisterDirectServices(typeof(DirectServiceAttribute)) or
kernel.AutoRegisterDirectServices(typeof(OperationContractAttribute))
- Added ability to NOT auto register the client side provider with ExtJS by setting <autoRegisterProvider>false</autoRegisterProvider>

Bugfixes
--------
- Fixed some bugs where crashes would occur if the configuration was not set. This would occur during code registration of components (common scenario)
- Fixed file upload causing popup save
- Fixed simple type direct operation methods
- Fixed nullable handling

aritchie
29 Apr 2010, 4:56 AM
Updated to 2.2.0.0. Please view first message in this thread for details

aritchie
19 May 2010, 4:39 AM
Homepage: http://code.google.com/p/acrextdirect/
Binaries: http://acrextdirect.googlecode.com/files/Acr.ExtDirect-2.3.0.0_bin.zip
Source (SVN): http://acrextdirect.googlecode.com/svn/trunk/
Documentation: http://code.google.com/p/acrextdirect/wiki/Documentation


[2.3.0.0]
Features
--------
- Initial .NET4 Support - Use of dynamic for both form binders and direct parameters
- Queryable Method Transformer now supports select clause

Improvements
------------
- BREAKING - renamed method appliers to method transformers to better explain what they do
- disableDefaultAppliers renamed to disableDefaultTransformers
- GetNamespace implementation is now smarter in dealing with "unnamed/default" components. Usually from Component.For<>. No one
ever really puts .Named(""). Since Blah.Blah is not allowed in the ExtDirect actions js, it will takes the last string in the . split.

aritchie
26 May 2010, 4:27 PM
Homepage: http://code.google.com/p/acrextdirect/
Binaries: http://acrextdirect.googlecode.com/files/Acr.ExtDirect-2.3.1.0.zip
Source (SVN): http://acrextdirect.googlecode.com/svn/trunk/
Documentation: http://code.google.com/p/acrextdirect/wiki/Documentation

Improvements
------------
- Hybrid date/time json converter to deal with dates often coming in from components as string representations and needing to go out as
date objects. This is mix between IsoDateConverter for incoming & JavaScriptDateConverter for outgoing

Bugfixes
--------
- No longer messes up exception stack trace if error is thrown from service
- DefaultFormBinder will now work properly with all structs that do not have a form binder
- DefaultFormBinder will not attempt to instantiate objects without a parameterless constructor. This is necessary to bypass any custom DTO's that contain complex arrays that do not have custom form binders
- Now grabbing proper formbinder instead of possibly grabbing the DefaultFormBinder