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

c# – 我可以使用类型化的工厂设备返回实现基于(枚举)参数吗?,第1张

概述不知道这是否可行. 我需要根据枚举值返回正确的服务实现.所以手工编码的实现将如下所示: public enum MyEnum{ One, Two} public class MyFactory{ public ITypeIWantToCreate Create(MyEnum type) { switch (type) { case My 不知道这是否可行.

我需要根据枚举值返回正确的服务实现.所以手工编码的实现将如下所示:

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;           }      }}

返回的实现具有额外的依赖关系,需要通过容器注入,所以手工轧制的工厂将无法正常工作.

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

解决方法 如果将组件注册到容器中,将枚举值指定为组件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工厂的Selector

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# – 我可以使用类型化的工厂设备返回实现基于(枚举)参数吗?全部内容,希望文章能够帮你解决c# – 我可以使用类型化的工厂设备返回实现基于(枚举)参数吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存