gpt4 book ai didi

c# - 简单的注入(inject)器注册混凝土类型与生活方式

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:59 25 4
gpt4 key购买 nike

我正在寻找一种方法来注册具有指定生活方式的具体类型,基本上类似于以下内容。

public void SomeFunction( Type concrete, Lifestyle lifestyle ) =>
container.Register( concrete, lifestyle );

最佳答案

在 Simple Injector 中进行单个一对一映射时,实际上只有一种方法:

Container.Register(Type serviceType, Type implementationType, Lifestyle lifestyle);

所有其他方法只是该方法的方便重载或“快捷方式”。以下方法为例:

Container.Register<TService, TImplementation>(Lifestyle)

最终通过调用 Register(typeof(TService), typeof(TImplementation), lifestyle) 退回到非泛型重载.

同样适用于不接受 Lifestyle 的重载:

Container.Register<TService, TImplementation>()

他们只是通过为给定的实现类型提供确定的生活方式来转发调用,这是 - 在默认配置下 - 是短暂的生活方式:Register<TService, TImpementation>(Lifestyle.Transient) .

并且有多个重载允许对具体类型进行快捷注册,例如:

Container.Register<TConcrete>()

此方法将调用转发给 Register<TConcrete, TConcrete>() .换句话说,TConcrete均提供给 TServiceTImplementation .所以最终,这个电话以Register(typeof(TConcrete), typeof(TConcrete), Lifestyle.Transient)结束。 .

所以,长话短说,以下方法可让您注册具有生活方式的具体类型:

Register<TConcrete>(Lifestyle.Scoped)
Register<TConcrete, TConcrete>(Lifestyle.Scoped)
Register(typeof(Concrete), typeof(Concrete), Lifestyle.Scoped);

关于c# - 简单的注入(inject)器注册混凝土类型与生活方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42499627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com