c# – 具有参数条件的Simple Factory,使用Unity 2.0
发布时间:2020-12-15 04:22:55 所属栏目:百科 来源:网络整理
导读:假设我有一个Simple Factory(SimpleProductFactory),它使用一个condition参数来确定如何创建这样的产品: public static class SimpleProductFactory{ public static Product MakeProduct(Condition condition) { Product product; switch(condition) { case
假设我有一个Simple Factory(SimpleProductFactory),它使用一个condition参数来确定如何创建这样的产品:
public static class SimpleProductFactory { public static Product MakeProduct(Condition condition) { Product product; switch(condition) { case Condition.caseA: product = new ProductA(); // Other product setup code break; case Condition.caseA2: product = new ProductA(); // Yet other product setup code break; case Condition.caseB: product = new ProductB(); // Other product setup code break; } return product; } } 该工厂由一些客户端使用,用于处理包含以下条件的运行时数据: public class SomeClient { // ... public void HandleRuntimeData(RuntimeData runtimeData) { Product product = SimpleProductFactory.MakeProduct(runtimeData.Condition); // use product... } // ... } public class RuntimeData { public Condition Condition { get; set; } // ... } 如何使用Unity 2.0实现相同的构造行为? 产品注册(或产品介面)应如何进行? // How do I do this? container.RegisterType<Product>(???) 我需要做些什么才能在客户端代码中提供条件? 最初的客户端代码(来自以前的编辑),以突出显示最后一个问题,这解释了几个答案的措辞: public class SomeClient { // ... public void HandleRuntimeData(RuntimeData runtimeData) { // I would like to do something like this,// where the runtimeData.Condition determines the product setup. // (Note that using the container like this isn't DI...) Product product = container.Resolve<Product>(runtimeData.Condition); // use product... } // ... } (我已经在Stackoverflow看过很多类似的问题,但是还没有能够适应他们,他们的答案满足了我的需要.) 解决方法
您不应该使用容器来执行这样的运行时决策.而是通过容器将您的工厂注入客户端.如果工厂需要集装箱的配件,在创建时将其注入工厂.
将工厂更改为实际对象,而不是仅仅是静态方法的容器,并注入它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |