Here what I have now
Container.RegisterType<IUserManager, UserManagerMock>();
Container.RegisterType<IUser, UserMock>(
new InjectionFactory(
(c) => c.Resolve<IUserManager>().GetUser("John")));
and get it
Container.Resolve<IProfile>();
I want to pass a name as parameter to Factory so that I will be able to resolve user object with name;
Something like this:
Container.Resolve<IProfile>("Jonh");
How can I change the type registration for this case?
While most DI frameworks have advanced features to do these types of registrations, I personally rather change the design of my application to solve such a problem. This keeps my DI configuration simple and makes the code easier to understand. Especially for the creation of objects that depend on some context (thread, request, whatever) or have a lifetime that must be managed explicitly, I like to define factories. Factories make these things much more explicit.
In your situation, you want to fetch a profile for a certain user. This is typically something you would like to have a factory for. Here’s an example of this:
I hope this helps.