我目前正在嘗試從溫莎城堡遷移到簡單噴油器。從溫莎遷移到簡單的噴油器,HttpContext.Current.Session爲空
內的服務我在試圖注入HttpSessionStateBase所示下面的構造函數的服務:
public UserSession(IResourceRepository resourceRepository, IUser user,
IRoleResolver roleResolver, IApproverRepository approverRepository,
IActiveDirectory activeDirectory, HttpSessionStateBase httpSession,
Settings appSettings)
{
_resourceRepository = resourceRepository;
_user = user;
_roleResolver = roleResolver;
_approverRepository = approverRepository;
_activeDirectory = activeDirectory;
_httpSession = httpSession;
_allowedUsernamePostfixes = appSettings.AuthenticationAllowedUsernamePostfixes;
}
要與溫莎做到這一點我可以使用一個FactoryMethod注入HttpSessionStateBase作爲新HttpSessionStateWrapper。
private static IWindsorContainer BuildWindsorContainer()
{
var container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(
new CollectionResolver(container.Kernel, true));
container.Register(
Component.For<IWindsorContainer>().Instance(container)
);
container.Install(FromAssembly.This());
container.Register(
Component.For<HttpRequestBase>()
.UsingFactoryMethod(() => new HttpRequestWrapper(HttpContext.Current.Request))
.LifestyleTransient(),
Component.For<HttpSessionStateBase>()
.UsingFactoryMethod(() => new HttpSessionStateWrapper(HttpContext.Current.Session))
.LifestyleTransient(),
return container;
}
該方法在Global.asax.cs文件中的ASP.NET MVC 4項目的Application_Start方法中被調用時將工作。
我現在已經嘗試通過將兩個溫莎FactoryMethods如下簡單的代碼注入到其轉換爲簡單的進樣:
container.Register<HttpRequestBase>(
() => new HttpRequestWrapper(HttpContext.Current.Request),
Lifestyle.Transient);
container.Register<HttpSessionStateBase>(
() => new HttpSessionStateWrapper(HttpContext.Current.Session),
Lifestyle.Transient);
的問題是,當我把在Application_Start方法這種方法則的HttpContext。 Simple Inject調用容器驗證方法時,Current.Session將爲null。
任何人都有這個解決方案嗎?
嗨,你是正確的代碼與使用運行時數據的氣味。令人遺憾的是,應用程序的創始人基於使用運行時數據的服務進行身份驗證...... 我已經嘗試了一些代碼,但無法使HttpSessionStateBase工作,因爲HttpSessionStateWrapper和HttpSessionState之間沒有隱式類型。 – McBoman
對不起,我沒有時間測試代碼,希望這會給你一些關於如何解決這個問題的指導。 – Steven
當然,感謝您的幫助。 – McBoman