gpt4 book ai didi

.net - 如何控制 MembershipProvider 实例的创建/生命周期?

转载 作者:行者123 更新时间:2023-12-04 15:04:18 25 4
gpt4 key购买 nike

我在我的 Web.Config 文件中注册了一个自定义 MembershipProvider 类。我正在使用 CaSTLe Windsor 使用控制反转,并且我已将自定义 MembershipProvider 类注册为 transient (因为它也使用 transient 服务)。

这意味着我希望在每个 Web 请求上重新创建 Membership 提供程序实例。目前,每个应用程序域只创建一次,因此当它尝试访问它所依赖的服务时,该服务实例会被重用,而它不应该被重用。

现在我需要找到一种方法让 Windsor 控制我的自定义 MembershipProvider 的生命周期,但我不知道如何。我希望在 .NET Framework 的某个地方有一个工厂,允许我覆盖实例创建并将其重新路由到 Windsor,但我找不到任何类似的东西。

顺便说一句,我使用的是 .NET 4.0。

更新:这是我的一些代码,所以你可以看到我在做什么:

网络配置:

<membership defaultProvider="MyMembershipProvider" >
<providers>
<clear/>
<add name="ApplicationMembershipProvider"
type="MyNamespace.MyMembershipProvider, MyAssembly"/>
</providers>
</membership>

成员(member)提供者
public class MyMembershipProvider : MembershipProvider
{
private IMyService myService;

public MyMembershipProvider() : base()
{
// We should use constructor injection here but since we cannot control
// the construction of this class, we're forced to create the dependency
// ourselves.
}

public override bool ValidateUser(string username, string password)
{
if (myService == null)
{
// This scope is only reached once within the browser session,
// ASP.NET keeps the instance of MyMembershipProvider in memory
// so the myService field keeps its value across web requests.
// This results in Castle Windsor (which I have configured the service
// locator to use) not being able to control the lifetime of
// the MyService instance. So, the inability of Windsor to control
// the lifetime of MembershipProvider instances, inhibits the lifetime
// management of MyService instances as well.
myService = ServiceLocator.Current.GetInstance<IMyService>();
}

return myService.ValidateUser(username, password);
}
}

最佳答案

我只是blogged about this有一个解决方案。

简而言之,此解决方案涉及一个简单、可重用的 MembershipProvider,它调用容器来解析您的自定义 MembershipProvider。与使用“BuildUp”容器功能的其他解决方案不同,这个解决方案真正控制了实例化,从而实现了构造函数注入(inject)(这反过来又实现了不变性)和可代理性。

关于.net - 如何控制 MembershipProvider 实例的创建/生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193484/

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