Bia Securities

A generic api modification

by on Nov.28, 2006, under Uncategorized

In an attempt to become more comfortable with generics, I’m trying to find reasonable places to use them other than just for collections, etc.  This is one example:

I had a helper method that returns an object from nHibernate based on the supplied id:

public object GetObjectById(Type type, int id)

{

    if (this._activeSession != null)

    {

        return this._activeSession.Load(type, id);

    }

    else

    {

        throw new NullReferenceException(“The repository doesn’t have an active session”);

    }

}

Which I replaced with:

public T GetObjectById<T>(int id)

{

    if (this._activeSession != null)

    {

        return (T)this._activeSession.Load(typeof(T), id);

    }

    else

    {

        throw new NullReferenceException(“The repository doesn’t have an active session”);

    }

}

While it doesn’t really change anything for how the object is retrieved, it does simplify how I call the method.  Instead of having to write something like: 

Property property = MyHelperClass.GetObjectById(typeof(Property), id) as Property;

I instead write the following:

Property property = MyHelperClass.GetObjectById<Property>(id);

So in the future when I upgrade to nHibernate 1.2+, this should make the transition smoother.  nHibernate 1.2 supports generics among other things.

[Update] – I upgraded to nHibernate 1.2.  So my helper function looks like:

public T GetObjectById<T>(int id)

{

    if (this._activeSession != null)

    {

        return this._activeSession.Load<T>(id);

    }

    else

    {

        throw new NullReferenceException(“The repository doesn’t have an active session”);

    }

}


Comments are closed.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!