gpt4 book ai didi

c# - CaSTLe 项目每个 session 生活方式与 ASP.NET MVC

转载 作者:太空狗 更新时间:2023-10-29 20:49:53 24 4
gpt4 key购买 nike

我是 CaSTLe Windsor IoC 容器的新手。我想知道是否有一种方法可以使用 IoC 容器来存储 session 变量。我在想这样的事情:

我想要一个类来存储搜索选项:

public interface ISearchOptions{
public string Filter{get;set;}
public string SortOrder{get;set;}
}

public class SearchOptions{
public string Filter{get;set;}
public string SortOrder{get;set;}
}

然后将其注入(inject)到必须使用它的类中:

public class SearchController{
private ISearchOptions _searchOptions;
public SearchController(ISearchOptions searchOptions){
_searchOptions=searchOptions;
}
...
}

然后在我的 web.config 中配置城堡,我想要这样的东西:

<castle>
<components>
<component id="searchOptions" service="Web.Models.ISearchOptions, Web" type="Web.Models.SearchOptions, Web" lifestyle="PerSession" />
</components>
</castle>

并让 IoC 容器处理 session 对象,而无需我自己显式访问它。

我该怎么做?

谢谢。

编辑:一直在做一些研究。基本上,我想要的是拥有 session 作用域组件。我来自 Java 和 Spring Framework,我有 session 范围的 bean,我认为它们对存储 session 数据非常有用。

最佳答案

这可能是您要找的。

public class PerSessionLifestyleManager : AbstractLifestyleManager
{
private readonly string PerSessionObjectID = "PerSessionLifestyleManager_" + Guid.NewGuid().ToString();

public override object Resolve(CreationContext context)
{
if (HttpContext.Current.Session[PerSessionObjectID] == null)
{
// Create the actual object
HttpContext.Current.Session[PerSessionObjectID] = base.Resolve(context);
}

return HttpContext.Current.Session[PerSessionObjectID];
}

public override void Dispose()
{
}
}

然后添加

<component
id="billingManager"
lifestyle="custom"
customLifestyleType="Namespace.PerSessionLifestyleManager, Namespace"
service="IInterface, Namespace"
type="Type, Namespace">
</component>

关于c# - CaSTLe 项目每个 session 生活方式与 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1366214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com