我需要根据枚举值返回正确的服务实现.所以手工编码的实现将如下所示:
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# – 我可以使用类型化的工厂设备返回实现基于(枚举)参数吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)