0
我將當前項目從AutoFac轉換爲簡單注入器,但我不能讓它適用於我的MVC操作篩選器。我的UserProfileProc
屬性類包含IUserProfile
類型的UserProfile
,但它未注入;其值爲空。簡單注射器與RegisterMvcAttributeFilterProvider不注入自定義屬性
這樣
public class UserProfileProc : ActionFilterAttribute
{
IUserProfile UserProfile;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
UserLoginInfo userinfo = UserProfile.GetUserInfo(); .....
}
}
更新1我的行動代碼:運行時UserProfile.GetUserInfo我 改變IUserProfile作爲公共財產,這說的是空();
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(); .....
}
}
我的噴油器噴油器的簡單初始化器類是
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