Binsor 2.0
All credit should go to Craig Neuwirt, for some amazing feats of syntax. He has managed to extend Binsor to include practically all of Windsor's configuration schema. This is important because previously we had to resort to either manual / ugly stuff or go back to XML (see: manual & ugly).
This is important because some of the more interesting things that you can do with Windsor are done using the facilities, and Craig has made sure that Binsor will support the main ones in a natural manner, including out of the box support for the standard configuration model.
Let us start by using the standard configuration model for a moment, the Active Record Integration Facility is expecting to be configured from XML, but we can configure it like this:
facility arintegration, ActiveRecordFacility:
configuration:
@isWeb = true, isDebug = true
assemblies = [ Assembly.Load("My.Assembly") ]
config(keyvalues, item: add):
show_sql = true
command_timeout = 5000
connection.isolation = 'ReadCommitted'
cache.use_query_cache = false
dialect = 'NHibernate.Dialect.MsSql2005Dialect'
connection.provider = 'NHibernate.Connection.DriverConnectionProvider'
connection.driver_class = 'NHibernate.Driver.SqlClientDriver'
connection.connection_string_name = 'MyDatabase'
end
end
To compare, here is the equivalent XML configuration.
<facility id="arintegration"
type="Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility, Castle.Facilities.ActiveRecordIntegration"
isWeb="true"
createSchema="true">
<assemblies>
<item>My.Assembly</item>
</assemblies>
<config>
<add key="hibernate.cache.use_query_cache" value="true" />
<add key="hibernate.connection.isolation" value="ReadCommitted" />
<add key="hibernate.show_sql" value="false" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.connection.connection_string_name" value="MyDatabase" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
</config>
</facility>
We don't have any significant reduction in the number of lines. This is mostly because we need to specify a lot of items for the facility to work, but we do have significant reduction in the noise that we have to deal with.
But, frankly, this isn't the best sample, let us take a look at the shortcuts that Binsor now provides, shall we?
Event Wiring
XML configuration:
<component
id="SimpleListener"
type="Castle.Facilities.EventWiring.Tests.Model.SimpleListener, Castle.Facilities.EventWiring.Tests" />
<component
id="SimplePublisher"
type="Castle.Facilities.EventWiring.Tests.Model.SimplePublisher, Castle.Facilities.EventWiring.Tests" >
<subscribers>
<subscriber id="SimpleListener" event="Event" handler="OnPublish"/>
</subscribers>
</component>
And the Binsor configuration to match it:
component simple_listener, SimpleListener
component simple_publisher, SimplePublisher:
wireEvent Publish:
to @simple_listener.OnPublish
Now that is far clearer, isn't it?
Factory Support
XML configuration:
<component id="mycompfactory"
type="Company.Components.MyCompFactory, Company.Components"/>
<component id="mycomp"
type="Company.Components.MyComp, Company.Components"
factoryId="mycompfactory"
factoryCreate="Create" />
Binsor configuration:
component mycompfactory, MyCompFactory
component mycomp, MyComp:
createUsing @mycompfactory.Create
Other new features:
- Integrating Castle Resources, so now we can use Binsor over several files, which can be located anywhere, including assembly resources, for instance.
- Easy support for startable and life styles.
- Extension points for future needs.