- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我发现在 CaSTLeWindsor DI 中,您可以很容易地陷入一种情况,即有关以不同生活方式注册的依赖组件。
假设我们有以下类和接口(interface):
public class MyThing : IMyThing
{
public MyThing()
{
}
}
public interface IMyThing {}
这是在相关的 Windsor 安装程序中注册的,其中还包括 HttpContextBase 的注册:
container.Register(
Component
.For<IMyThing>()
.ImplementedBy<MyThing>()
.LifeStyle.Singleton);
container.Register(
Component
.For<HttpContextBase>()
.UsingFactoryMethod(_ => new HttpContextWrapper (HttpContext.Current) )
.LifestylePerWebRequest());
一切都很好。但是现在一些开发人员决定 MyThing 现在依赖于 HttpContext 中的某些东西,所以他更改 MyThing 以接受 HttpContextBase:
public class MyThing : IMyThing
{
private readonly HttpContextBase _httpContext;
public MyThing(HttpContextBase httpContext)
{
_httpContext = httpContext;
}
}
从表面上看,这似乎很合理 - 毕竟,在设计您的类时,您应该能够做到这一点而无需过多考虑依赖项注入(inject)的细节。然而,实际上,我们现在有一个微妙(但可能很严重)的错误,即一个组件依赖于另一个生命周期比自身短的组件。
现在,我原以为这会在 CaSTLe Windsor 中抛出某种异常,但似乎并没有。它会非常高兴地为您提供一个 MyThing,其中包含当时碰巧是当前 HttpContext 的任何内容,并且将在应用程序的剩余生命周期中继续为您提供相同的对象具有相同的 HttpContext。
谷歌搜索后,我无法找到任何 Windsor 配置来解决这个问题。有人对此有什么建议吗?我所从事的项目绝对是 DI 设置的狗晚餐,事实证明发现此类问题非常困难(在我给出的示例中,如果 Controller 的 HttpContext 错误,应该会很明显,但在其他情况下可能要少得多)。
最佳答案
CaSTLe Windsor 不会为此抛出异常,但会在调试器中将其显示为警告。 (在新标签页中打开图片)
下面是一个可以显示它的测试:
[TestFixture]
public class WindsorTests
{
[Test]
public void LifecycleWarningTest()
{
IWindsorContainer container = new WindsorContainer();
container.Register(
Component.For<ISingleton>().ImplementedBy<Singleton>().LifestyleSingleton(),
Component.For<ITransient>().ImplementedBy<Transient>().LifestyleTransient()
);
ISingleton singleton = container.Resolve<ISingleton>();
}
}
interface ISingleton
{
}
class Singleton : ISingleton
{
private readonly ITransient _transient;
public Singleton(ITransient transient)
{
_transient = transient;
}
}
interface ITransient
{
}
class Transient : ITransient
{
}
关于c# - 温莎城堡 : How to detect registrations with a longer lifetime than their dependencies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327777/
我今天被 gcm 弄糊涂了。我不知道我的 registrationid 是否正确。我在以 APA 开头的 registrationid 前面有字符和冒号。模式是 xXXXxxX:APA...。我使用此
要求用户提供电子邮件地址,以便我们向他/她发送一封电子邮件以完成注册过程有什么好处?它当然无法抵御 (D)DoS 攻击,而且我看不出它如何提高安全性。 最佳答案 我想到的第一件事是它允许他们实际确认帐
任何支持使用 Web 服务或类似功能进行域名注册的域名注册商都不会告诉您成为经销商? 我没有注册那么多域名,我对支付经销商费用不感兴趣。 如果我可以在不支付预付费用的情况下成为经销商,那就没问题了。
我正在使用 Jersey 创建一个 Web 服务。 该服务应处理用户注册。我的计划是获取一个包含用户名和密码的注册请求,将它们都存储在 MySql 数据库中,并在每次用户想要登录时获取它。 我读过您应
iOS9的当前API状态更改为-setKeepAliveTimeout:handler:已过时。 到目前为止,这是iOS上的VoIP SIP应用程序可以维持其在SIP服务器上注册的唯一方法。 LinP
好吧,让我先解释一下我的情况: 我是“主办”事件的组织的一部分。例如,我们有一个年度训练营,溜冰,掷骰子/足球比赛,晚餐等。 现在他们要我设计他们的网站。我的习惯通常是先将其放在纸上,因此我正在尝试这
我知道最终无法完成。 但是,有哪些选择: a)限制人员创建多个帐户的选项, b)增加检测多个帐户/人的机会 类似博客的网络服务? (人们可以注册自己的博客) 更新: 我认为“限制选择权”已经很好地回答
我读到,用户觉得必须验证电子邮件才能完成简单的注册很烦人,但是删除这个额外的步骤并使用验证码来处理机器人会导致用户无法重新获得对其的控制权的不舒服的情况如果他们忘记了密码。 那么,该怎么办呢?除了电子
我想知道用户注册的最佳实践。我倾向于将站点注册存储在单独的注册表中,然后在通过电子邮件确认注册后将数据传输到用户表中。 这样做的好处是从用户表中读取的内容不会因从未激活的注册而困惑。另一个好处是电子邮
我有兴趣在注册表中添加其他字段,例如昵称和出生日期。 我正在使用 django-registration 0.8,我打算编写自己的自定义表单。我看过 django-profiles,我认为它的隐私控制
如何设置需要由管理员手动激活帐户的 django-registration? 在帐户持有人单击电子邮件中的链接后,我希望向管理员发送一封电子邮件,他还需要单击一个链接,然后该帐户才会处于事件状态。 d
在我的应用程序中,我有 AUTH_PROFILE_MODULE设置为 users.UserProfile .此 UserProfile 具有功能 create当新用户注册时应该调用它,然后创建 Use
我正在使用 django-registration,我正在尝试连接到它的信号以自动创建一个 UserProfile。 信号定义: from django.dispatch import Signal
我关注了 this page建立一个django注册网站。它非常棒,注册和身份验证都很好地包装了。 但是,它没有告诉我,在显示网页之前,我如何检查用户是否已登录,该用户是谁?以及如何在登录后将用户定向
我在我的最新产品上使用(和学习)Django,我刚刚安装并开始使用 django-registration允许我的用户自动注册的应用程序。 一切正常,但我正在考虑将每个新用户分配到一个特定的组(已经创
如何使用电子邮件而不是用户名进行身份验证 django-registration . 进一步了解如何在安装注册模块后实现此更改。 我要在这里编辑解决方案吗 Anyone knows a good ha
我正在尝试创建自定义配置文件以将其他字段添加到 django-registration。这是我到目前为止的代码 -- 在models.py中 from django.db import models
我正在使用 django-registration (请参阅: https://bitbucket.org/ubernostrum/django-registration )在我的一个项目中。 dja
我有注册过程,以便在用户单击注册时存储“电话”的自定义属性,如果用户在其中输入了电话号码。但是,我希望它是一个必填字段,如果留空则防止注册。我还没有找到任何关于如何执行此操作的 keycloak 文档
我有django注册设置,它会发送电子邮件-是的! 但是,我们决定将我的网站命名为“example.com”,这不是我决定使用的名称。很酷的名字,但不适合我。 如何将example.com更改为其他内
我是一名优秀的程序员,十分优秀!