To answer your questions:
- That is using reflection and each
time that an object is called from the
container, reflection must used so
performance will be terrible. (Is this
the case? does it use reflection on
every call?)
- No, it does not. Most of the time it uses little reflection when you register the component. It may also use reflection while generating proxy type, first time you request a component from the container.
- If I am relying on Interfaces; how
do I deal with objects that have extra
methods and properties which have been
tacked onto the class? (through
inheritance)
- It’s all a matter of design. You don’t want to have each and every object created by the container. You use it primarily for service dependencies. In this case, you don’t care about what type is actually hiding behind the interface (that’s the whole point of it, isn’t it?).
You also can have class components, but they have limitations, and you must be aware of those (for example you can’t intercept calls to non-virtual methods). I have found Windsor to be the most mature, and best suited to my style of development container of all.
Other than that, Performance, I haven’t heard of a project that had to discard dependency container because of unacceptable performance. Windsor is really smart about it, and it caches the results of lengthy operations so that you don’t have to pay the price twice.
You may find charts on the Internet, comparing speed of many IoC containers. Two things to note about those: All containers are really fast.
Don’t think that the fact that other containers are faster on these charts than Windsor, means that they are better. Windsor does a lot of stuff for you that other containers don’t.