Я конвертирую текущий проект из AutoFac в Simple Injector, но я не могу заставить его работать для моего фильтра действий MVC. Мой класс атрибутов UserProfileProc
содержит UserProfile
типа IUserProfile
, но он не вводится; его значение равно нулю.Простой инжектор с RegisterMvcAttributeFilterProvider не вводит в пользовательский атрибут
Мой Действие подобный код
public class UserProfileProc : ActionFilterAttribute
{
IUserProfile UserProfile;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
UserLoginInfo userinfo = UserProfile.GetUserInfo(); .....
}
}
Update 1: меняю IUserProfile в государственной собственности, в котором говорилось, равна нулю при запуске UserProfile.GetUserInfo();
public class UserProfileProc : ActionFilterAttribute
{
public IUserProfile UserProfile {get;set;}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
UserLoginInfo userinfo = UserProfile.GetUserInfo(); .....
}
}
Update 2: Мое текущее решение является температура:
public class UserProfileProc : ActionFilterAttribute
{
public IUserProfile UserProfile {
get {
return DependencyResolver.Current.GetService<IUserServer>();
}
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
UserLoginInfo userinfo = UserProfile.GetUserInfo(); .....
}
}
Мой Injector Простой класс Injector Initializer является
public static class SimpleInjectorInitializer
{
public static void Initialize()
{
var container = new Container();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcAttributeFilterProvider();
container.Verify();
DependencyResolver.SetResolver(
new SimpleInjectorDependencyResolver(container));
}
private static void InitializeContainer(Container container)
{
container.Register<IAppClientServer, AppClientServer>();
container.Register<IUserProfile, UserProfile \>();
container.Register<ILogger, NLogLogger>();
....
}
}
Я изменил код следующим образом: public IUserProfile UserProfile {get; set;}, теперь UserProfile является общедоступным, но при тестировании я получаю UserProfileis null. – Ericyu67
@ Ericyu67 И что происходит, когда вы запрашиваете «IUserProfile» непосредственно из контейнера? Например: 'container.GetInstance()'. Вызывает ли это исключение? –
Steven
В настоящее время мое временное решение похоже на то, что вы сказали, оно действительно работает. Но это плохой код, я хочу сделать инъекционную работу, если это возможно. – Ericyu67