gpt4 book ai didi

c# - 解决 caSTLe windsor 中的依赖项时如何将一种类型转换为另一种类型

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

我正在尝试实现一个工厂类来帮助我实例化一个类,FooBar .

FooBar看起来像这样:

public class BarConsumer
{
BarConsumer(IEnumerable<Bar>, IWibble wibbles)
{
...
}
}

我的工厂是这样的:

interface IBarConsumerFactory
{
BarConsumer MakeBarConsumerFromFoo(Foo)
}

IWibble CaSTLe.Windsor 很满意。我的IEnumerable<Bar>可以派生自 Foo 的单个实例.我有一个类(class),BarConsumerFactory这使得 BarConsumer来自Foo .不幸的是,要转Foo进入IEnumerable<Bar> ,它需要一些依赖项( IFillangie )。所有这些依赖项都已在 CaSTLe.Windsor 中注册。

目前,我有这个:

interface IBarConsumerTypeFactory
{
BarConsumer MakeBarConsumer(IEnumerable<Bar> bars)
}

class BarConsumerFactory : IBarConsumerFactory
{
BarConsumerFactory(
IFillangie fillangie,
IBarConsumerTypeFactory barConsumerTypeFactory)
{
...
}

BarConsumer MakeBarConsumerFromFoo(Foo foo)
{
//do some processing to create "processedFoo"
...

return _barConsumerTypeFactory.MakeBarConsumer(
_fillangie.FinalStep(processedFoo));
}
}

所以 IBarConsumerTypeFactory已注册 AsFactory() , 并直接匹配构造函数。

所以,这可行,但非常丑陋。

有什么办法可以删除 IBarConsumerTypeFactory , 并简单地展示 CaSTLe.Windsor 如何转换 Foo进入IEnumerable<Bar>使用 BarConsumerFactory (我猜这会被称为 FooBarConverter 吗?)

最佳答案

我相信你可以通过以下方式注册你的自定义工厂:

Component.For<IBarConsumerFactory>().ImplementedBy<BarConsumerFactory>().LifestyleTransient()

并完全删除

Component.For<IBarConsumerFactory>().AsFactory()

行。

这样消费者仍然可以依赖IBarConsumerFactory但温莎城堡将在内部通过它们BarConsumerFactory .

关于c# - 解决 caSTLe windsor 中的依赖项时如何将一种类型转换为另一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949075/

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