长话短说,我正在对Windsor进行修改,这将使我能够覆盖已注册的服务。真正意义上的覆盖是:如果您使用现有名称注册新服务,则旧注册将被删除,而新注册将被替换。
但是,我还想进行一些安全检查。特别是,如果以前已解决了旧组件的问题,我想禁止这种行为(以确保我不会泄漏组件并获得一致的依赖性解析)。现在,如果我既可以访问旧组件的IHandler
也可以访问IKernel
,该如何检查?现在,我使用ICommissionConcern
标记所有已创建的ComponentModel
:
class NameOverrideContributor : IContributeComponentModelConstruction
{
public void ProcessModel(IKernel kernel, ComponentModel model)
{
model.Configuration.Attributes.Add(NameOverrideSubsystem.CreatedFlag, null);
model.Lifecycle.Add(new NameOverrideComission());
}
class NameOverrideComission : ICommissionConcern
{
public void Apply(ComponentModel model, object component)
{
model.Configuration.Attributes[NameOverrideSubsystem.CreatedFlag] = "Component created";
}
}
}
然后只需检查此标志。有更好的方法吗?