小编Eel*_*lco的帖子

使用Autofac的IIndex来解析多个Keyed实例

我想以状态和策略模式共存的方式使用 AutoFac。在研究了如何操作之后,我熟悉了 Autofac 的键控/命名注册,并使用被动IIndex方法将其用于我的状态。之后,我研究了策略模式,对我来说,这似乎是使用相同想法的好方法,可以解决IIndex状态和策略问题。我以与状态相同的方式 ( enum) 保存了我的策略选项,并将它们键入DependencyResolver:

builder.RegisterType<NewAanvraag>().Keyed<IAanvraagState>(AanvraagState.Nieuw).Keyed<IAanvraagState>(BusinessState.Default);
builder.RegisterType<RareNewAanvraag>().Keyed<IAanvraagState>(AanvraagState.Nieuw).Keyed<IAanvraagState>(BusinessState.Rare);
builder.RegisterType<OpvoerenInformatie>().Keyed<IAanvraagState>(AanvraagState.OpvoerenInformatie).Keyed<IAanvraagState>(BusinessState.Default);
Run Code Online (Sandbox Code Playgroud)

这样,我想使用以动态顺序创建的两个选项,而某些实现可能与默认值相同,而有些则不然。然而,当尝试访问状态和策略时,我得到了 的概念KeyedServiceIndex2 (DelegateActivator),但这两个选项都无法单独解决

private readonly IIndex<AanvraagState, IAanvraagState> _states;
private readonly IIndex<BusinessState, IAanvraagState> _strategyState;

public IAanvraagDto AanvraagDto { get; set; }
private IAanvraagState CurrentState{ get { return _states[AanvraagDto.State];} }
private IAanvraagState CurrentStrategy { get { return _strategyState[AanvraagDto.BusinessState]; } }

public Aanvraag(IIndex<AanvraagState, IAanvraagState> states, IIndex<BusinessState, IAanvraagState> strategyState)
{
    _states = states;
    _strategyState = strategyState;
}

public void Start()
{
    CurrentStrategy.Start(AanvraagDto);
    SetState(AanvraagState.OpvoerenInformatie);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试同时使用两者时,它找不到实现(也尝试过 …

c# autofac

3
推荐指数
1
解决办法
5403
查看次数

标签 统计

autofac ×1

c# ×1