Skip to content
July 23, 2008 / dshuck

Dependent objects made even easier in Mach-II 1.6

In case you were wondering if Mach-II could get any cooler, the answer is *yes*!

For a few versions now, Mach-II has added the ability to inject ColdSpring beans in to your framework components (listeners, plugins, and filters) by use the parameter resolveMachIIDependencies when instantiating the ColdSpring plugin or property.

Take this example… Say that I have a LoginListener.cfc that is dependent on a ColdSpring bean LoginService that lives in our /com directory. I would first define that bean in our ColdSpring config like this:

<bean id="LoginService" />

Then, in our LoginListener we would need to create a setter that matched the Bean that we have defined in ColdSpring like so:

<cffunction name="setLoginService" access="public" output="false" returntype="void">
	<cfargument name="LoginService" required="true" type="com.LoginService" />
	<cfset variables.LoginService = arguments.LoginService />
</cffunction>

By taking these two actions, and insuring that your LoginService as an init() method as a constructor, when you initialize your application, variables.LoginService will automatically be available to you as an instance of your LoginService bean. That alone was pretty dang cool.

But wait there’s more!

With Mach-II 1.6, this process has become even less cumbersome. In some CFML tags, you can add unexpected attributes without throwing exceptions and are in essence ignored to offer a better solution for managing dependent objects. By default, Mach-II will look for a “depends” attribute in your tags, which can contain a comma separated list of your dependencies. For our simple LoginListener, our tag would look like this:

<cfcomponent output="false" extends="MachII.framework.Listener" depends="LoginService">

Now, instead of repetitive getters/setters, just by merely having that attribute, our LoginListener will now contain the method getLoginService() which will return an instance of the LoginService. That is just ridiculously easy!

As I said, the attribute actually accepts a comma separated list, so as we add dependencies, our tag might look more like this:

<cfcomponent output="false" extends="MachII.framework.Listener" depends="LoginService,UserService,LoggingService">

If you have made it this far, you have probably deducted that we will now have access to getLoginService(), getUserService(), and getLoggingService().

As I mentioned earlier, Mach-II will look for the attribute “depends” by default, but you can customize it to use other attribute names if you wish. You can find that information and more on the Mach-II wiki.

About these ads

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: