- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我无法确定使用相同安装程序为不同应用程序注册不同生活方式的最佳方法。
我有一个使用 CaSTLe Windsor IoC 的网络项目。有些东西的范围是使用 PerWebRequest 生活方式。这些类已在各自项目中的安装程序中注册。
到目前为止一切都很好,但我正在考虑将一些东西移动到 windowsService 来做一些预定的事情。该服务将解析与 web 项目相同的域,但在使用 PerWebRequest 生活方式注册类时会遇到麻烦。我想将其更改为该服务的 Scoped,但保持它在 Web 应用程序中的原样。配置在保存在各自程序集中的安装程序中完成。
安装程序不知道哪个应用程序正在尝试注册,但注册需要具有不同的生活方式,具体取决于安装程序是从 Web 应用程序还是从 Windows 服务注册的。
现在我已经恢复到一个丑陋的 Hack,直到我得到更好的解决方案。
private static bool scopeLifetime = false;
public static void SetScopedLifetime()
{
scopeLifetime = true;
}
public void Install(IWindsorContainer container, IConfigurationStore store)
{
var registrations = Classes.FromThisAssembly()
.WithService.DefaultInterfaces();
if (scopeLifetime)
{
container.Register(registrations.LifestyleScoped());
}
else
{
container.Register(registrations.LifestylePerWebRequest());
}
}
在安装程序不需要知道上下文的情况下告诉 windsor 我想做什么的正确方法是什么?
最佳答案
在对 caSTLe 框架进行更多练习之后,我想指出一个更好的方法来处理这个问题。有一个接口(interface)叫做 IContributeComponentModelConstruction
这使您可以在注册后操作组件的配置。它在每次注册后使用,因此可用于在组件配置上广撒网。您的特定问题被清楚地描述了 in a blog post通过马克西曼
鉴于此安装程序:
public class FooInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container,
IConfigurationStore store)
{
container.Register(Component.For<IFoo>().ImplementedBy<Foo>().LifeStyle.Transient);
}
}
您可能想在另一个上下文中改变生活方式,因此创建一个 IContributeComponentModelConstruction
实例并将其添加到容器中
public class SingletonEqualizer :
IContributeComponentModelConstruction
{
public void ProcessModel(IKernel kernel,
ComponentModel model)
{
model.LifestyleType = LifestyleType.Singleton;
}
}
/* --- */
var container = new WindsorContainer();
container.Kernel.ComponentModelBuilder
.AddContributor(new SingletonEqualizer()); // before the intaller is called
container.Install(new FooInstaller());
每个组件的生命周期都会改变;您还可以根据正在注册的组件优化行为。回想起来,我真的认为这是对您问题的最佳答案。
关于c# - 使用相同的安装程序从不同的应用程序设置不同的 CaSTLe Windsor 生活方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425481/
我正在尝试使用 Java6(JAR) 解决以下关于 spoj 的问题:- 你的程序是使用蛮力方法来找到生命、宇宙和一切的答案。更准确地说......从输入到输出重写小数字。读入数字42后停止处理输入。
我是一名优秀的程序员,十分优秀!