I am still confused about passing by ref.
If I have a Cache object which I want to be accessed/available to a number of objects, and I inject it using constructor inject
Objects are automatically passed by reference even when you declare them to be passed by value in function arguments, in the .NET framework.
This is because the object itself is a reference type, so you can modify the members of the object, even though you cannot replace the object itself.
See
http://msdn.microsoft.com/en-us/library/aa903253(VS.71).aspx