- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 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>
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/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!