我正在将当前项目从AutoFac转换为Simple Injector,但我无法使其适用于我的MVC动作过滤器。我的UserProfileProc
属性类包含UserProfile
类型IUserProfile
,但未注入;它的值为null。
我的行动代码就像这样
public class UserProfileProc : ActionFilterAttribute
{
IUserProfile UserProfile;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
UserLoginInfo userinfo = UserProfile.GetUserInfo(); .....
}
}
更新1: 我将IUserProfile更改为公共属性,当运行UserProfile.GetUserInfo()时,该属性为null;
public class UserProfileProc : ActionFilterAttribute
{
public IUserProfile UserProfile {get;set;}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
UserLoginInfo userinfo = UserProfile.GetUserInfo(); .....
}
}
更新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(); .....
}
}
My Injector Simple 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>();
....
}
}
答案 0 :(得分:0)
您没有将UserProfile
定义为UserProfileProc
上的属性,并且它不公开。调用RegisterMvcAttributeFilterProvider
时,只有具有公共setter的公共实例属性被注入属性。所有其他事情都被默默地忽略了。
有关将RegisterMvcAttributeFilterProvider
与隐式属性注入一起使用的替代方法,请查看此Stackoverflow Q/A。有关Simple Injector中属性注入的更多信息,请阅读this wiki。