加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:39:14 所属栏目:百科 来源:网络整理
导读:不知道这是否可行. 我需要根据枚举值返回正确的服务实现.所以手工编码的实现将如下所示: public enum MyEnum{ One,Two} public class MyFactory{ public ITypeIWantToCreate Create(MyEnum type) { switch (type) { case MyEnum.One return new TypeIWantTo
不知道这是否可行.

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

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,...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读