How to detect if a type is a Func<T> and get the type of the T
c#, generics, ioc-container
Solution
take a look at this question from this morning - might give you a good start - C# generic list <T> how to get the type of T?
Problem
I am wondering whether I can upgrade a basic IoC container I am using to support lazy load. So if I have registered IFoo, I would like the IoC container to know how to fulfil both of the following dependencies (the first being the standard way IoC containers work, while the second returns a simple delegate that calls into the container for an IFoo when it is invoked). ``` public Bar(IFoo x) public Bar2(Func<IFoo> lazyFoo) ``` The problem comes when I try to write the code that will actually do this. Is there a syntax that will make the following pseudo-code compile? ``` public T Resolve<T>() { if (T is Func<X>) return (T) () => Resolve(typeof(X)); return (T)Resolve(typeof(T)); } ``` Or to put my question another way, if I have a type `T`, how can I detect if it is an instance of `Func<X>`, and if so, what is the type of `X`?