В то время как большинство DI-фреймворков имеют расширенные функции для регистрации такого типа, я лично предпочитаю изменить дизайн своего приложения для решения такой проблемы.Это делает мою конфигурацию DI простой и облегчает понимание кода.Особенно для создания объектов, которые зависят от некоторого контекста (поток, запрос и т. Д.) Или имеют время жизни, которое должно управляться явно, мне нравится определять фабрики.Фабрики делают эти вещи намного более явными.
В вашей ситуации вы хотите получить профиль для определенного пользователя.Как правило, это то, что вы хотели бы иметь фабрику для.Вот пример этого:
// Definition
public interface IProfileFactory
{
IProfile CreateProfileForUser(string username);
}
// Usage
var profile = Container.Resolve<IProfileFactory>()
.CreateProfileForUser("John");
// Registration
Container.RegisterType<IProfileFactory, ProfileFactory>();
// Mock implementation
public class ProfileFactory : IProfileFactory
{
public IProfile CreateProfileForUser(string username)
{
IUser user = Container.Resolve<IUserManager>()
.GetUser(username);
return new UserProfile(user);
}
}
Надеюсь, это поможет.