gpt4 book ai didi

c# - 我可以使用类型化工厂设施返回基于(枚举)参数的实现吗?

转载 作者:可可西里 更新时间:2023-11-01 08:26:01 26 4
gpt4 key购买 nike

不确定这是否可能。

我需要根据枚举值返回正确的服务实现。所以手工编码的实现看起来像这样:

public enum MyEnum
{
One,
Two
}

public class MyFactory
{
public ITypeIWantToCreate Create(MyEnum type)
{
switch (type)
{
case MyEnum.One
return new TypeIWantToCreate1();
break;
case MyEnum.Two
return new TypeIWantToCreate2();
break;
default:
return null;
}
}
}

返回的实现具有额外的依赖项,需要通过容器注入(inject),因此手动工厂将无法工作。

这可能吗?如果可以,注册会是什么样子?

最佳答案

如果将您的组件注册到容器中并将枚举值指定为组件 ID 是一种选择,您也可以考虑这种方法

 public class ByIdTypedFactoryComponentSelector : DefaultTypedFactoryComponentSelector
{
protected override string GetComponentName(MethodInfo method, object[] arguments)
{
if (method.Name == "GetById" && arguments.Length > 0 && arguments[0] is YourEnum)
{
return (string)arguments[0].ToString();
}

return base.GetComponentName(method, arguments);
}
}

比 ByIdTypedFactoryComponentSelector 将用作您的 Typed 工厂的选择器

public enum YourEnum
{
Option1
}

public IYourTypedFactory
{
IYourTyped GetById(YourEnum enumValue)
}


container.AddFacility<TypedFactoryFacility>();
container.Register
(
Component.For<ByIdTypedFactoryComponentSelector>(),

Component.For<IYourTyped>().ImplementedBy<FooYourTyped>().Named(YourEnum.Option1.ToString()),

Component.For<IYourTypedFactory>()
.AsFactory(x => x.SelectedWith<ByIdTypedFactoryComponentSelector>())
.LifeStyle.Singleton,

...

关于c# - 我可以使用类型化工厂设施返回基于(枚举)参数的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711840/

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