Есть ли способ разрешить экземпляр класса на уровне контроллера?Я хотел бы переопределить предыдущий экземпляр, созданный Unity, и назначить это новое значение через контроллер.
Проблема в том, что я не уверен, как получить доступ к контейнеру Unity в контроллере веб-приложения.
Вот мой код:
Репозиторий:
public class UserRepository: IUserRepository
{
private UserInformation _userInfo;
public UserRepository(string headerValue)
{
_userInfo = LoadUserData(headerValue);
}
public UserInformation GetUserInfo()
{
return _userInfo;
}
}
public class UserInformation
{
public string FirstName;
public string LastName;
}
Конфигурация Unity:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//Some code omitted
config.DependencyResolver = new UnityDependencyResolver(UnityConfig.RegisterComponents());
}
}
public static class UnityConfig
{
public static UnityContainer RegisterComponents()
{
//Unity Configuration
var container = new UnityContainer();
container.RegisterType<IUserRepository, UserRepository>(new InjectionConstructor("DummyHeaderValue"));
return container;
}
}
Контроллер:
public class CustomerController : ApiController
{
public CustomerController()
{
//Something like this
container.Resolve<UserRepository>(new InjectionConstructor(Request.GetHeader("RealHeaderValueFromHttpRequest")));
}
}
Тогда я должен быть в состояниииспользовать обновленный экземпляр UserRepository
во всем приложении.
Есть мысли о том, как этого добиться?
Редактировать: Как указал @Nkosi, я неиметь доступ к запросу в конструкторе контроллера.Итак, позвольте мне перефразировать мой вопрос еще раз:
Как бы я инициализировал UserRepository с UserInformation
объектом, который содержит информацию о текущем пользователе?Причина, по которой я хочу это сделать, заключается в том, что во всем приложении мне нужны данные пользователя и я не хочу передавать идентификатор пользователя из каждого метода
Примерно так: Из любого метода в приложении
UserInformation obj = _userRepository().GetUserInfo();