factory-pattern 相关问题

此标记有时用于引用工厂方法模式([factory-method]),有时用于引用抽象工厂模式([abstract-factory])。请使用这些标签中的任何一个而不是此标签。

通过接口/工厂填充集合?

我正在使用一种模式,其中实现接口的具体 ViewModel 被传递到存储库,然后存储库填充 ViewModel 对象,但仅使用该接口。这有点

回答 2 投票 0

带模板的 C++ 工厂模式

我正在尝试使用 C++ 模板编写抽象工厂。因为在遇到麻烦之前我从来没有做过这样的事情。我写的代码,你可以自己验证一下,是wr...

回答 2 投票 0

如何在nestjs中正确使用工厂模式

在Nestjs中,我有一个模块,它使用useFactory基于configValue动态创建类 该模块中没有专门的服务,而是返回一个依赖于配置的服务,

回答 2 投票 0

什么是 Ruby 工厂方法?

我理解工厂方法是一种类方法,它利用 self 关键字并实例化它自己的类的对象。我不明白这有什么用处或者它如何扩展

回答 3 投票 0

工厂设计模式是否违反了C#中实体原则的依赖倒置原则? [重复]

根据定义,依赖注入促进了松散耦合、可维护和可测试的代码,并且使用接口和构造函数注入,我们可以获得实现接口的类的对象...

回答 2 投票 0

工厂设计模式是否违反了C#中solid原则的依赖注入?

根据定义,依赖注入促进了松散耦合、可维护和可测试的代码,并且使用接口和构造函数注入,我们可以获得实现接口的类的对象...

回答 1 投票 0

工厂方法:为什么不在工厂中为每种类型创建一个 CreateMethod?

所以我正在阅读《设计模式》一书,以查找有关工厂模式的一些详细信息。我正在阅读有关实现的两种主要变体: 使用抽象工厂和具体工厂...

回答 1 投票 0

正确覆盖python3中的__new__

所以我试图重写 __new__ 并让它作为工厂存在来创建 派生实例。在阅读了一些关于 SO 的内容之后,我的印象是我应该在派生的 ins 上调用 __new__ ...

回答 1 投票 0

如何使用依赖注入解析工厂类中的服务? | C#

我在 DI 容器上注册了同一接口的六个实现,如下所示: services.AddScoped(); 服务.AddScoped 我在 DI 容器上注册了同一接口的六个实现,如下所示: services.AddScoped<IProductService, ProductService1>(); services.AddScoped<IProductService, ProductService2>(); // ... services.AddScoped<IProductService, ProductService6>(); 使用这些服务的控制器有一个参数productName,我用它来选择我想要的服务。为了分离关注点,我实现了一个工厂类,它接受该字符串并从服务提供者检索所请求的服务。像这样的东西: public string ProductController(string productName) { var myService = _productFactory.GetProductService(productName); // ... do other stuff } 这就是我对工厂课程的想法 public IProductService GetProductService(string productName) { switch (productName.ToLower()) { case "product1": return _serviceProvider.GetRequiredService<ProductService1>(); case "product2": return _serviceProvider.GetRequiredService<ProductService2>(); // ... } } 但是,这会返回错误,因为它找不到 ProductService1 类型的服务,等等。根据我对这些方法如何工作的理解,它只找到类型IProductService。 如何根据实现来搜索所需的服务?我可以按名称搜索服务吗?或者有没有办法将字符串链接到 DI 容器上的实现?如果我无法告诉工厂类应该在每种情况下检索哪个实现,我不知道工厂类将如何工作。 您实际上并未将任何内容注册为 ProductService1、2 或 3 等。您将它们全部注册为 IProductService。您可以将它们注册为您尝试解析它们的类型,如下所示: services.AddScoped<ProductService1>(); 这是一个完整的工作示例: using Microsoft.Extensions.DependencyInjection; var factory = new ProductServiceFactory(); var service = factory.GetProductService("product1"); Console.WriteLine(service.ToString()); class ProductServiceFactory { readonly IServiceProvider _serviceProvider; public ProductServiceFactory() { var services = new ServiceCollection(); services.AddScoped<ProductService1>(); services.AddScoped<ProductService2>(); services.AddScoped<ProductService3>(); _serviceProvider = services.BuildServiceProvider(); } public IProductService GetProductService(string productName) { switch (productName.ToLower()) { case "product1": return _serviceProvider.GetRequiredService<ProductService1>(); case "product2": return _serviceProvider.GetRequiredService<ProductService2>(); case "product3": return _serviceProvider.GetRequiredService<ProductService3>(); default: throw new ArgumentException(productName); } } } interface IProductService { } class ProductService1 : IProductService { } class ProductService2 : IProductService { } class ProductService3 : IProductService { } 请注意,这实际上可能会更干净一些。如果您使用 Scrutor 进行注册,则无需注册每个单独的类型,因此下次添加产品服务时它将自动注册。 var services = new ServiceCollection(); services.Scan(s => s.FromAssemblyOf<IProductService>() .AddClasses(c => c.AssignableTo<IProductService>()) .AsSelf() ); // no longer needed to do individual registrations // Scrutor will pick up these and any new IProductService implementations! //services.AddScoped<ProductService1>(); //services.AddScoped<ProductService2>(); //services.AddScoped<ProductService3>(); _serviceProvider = services.BuildServiceProvider(); 有一些方法可以清理工厂并进行制造,这样您就不必不断添加案例陈述。例如,假设您的 IProductServices 必须声明它们支持哪种产品,我们可以这样获取它们: using Microsoft.Extensions.DependencyInjection; var factory = new ProductServiceFactory(); var service = factory.GetProductService("product1"); Console.WriteLine(service.ToString()); class ProductServiceFactory { IEnumerable<IProductService> _productServices; public ProductServiceFactory() { var services = new ServiceCollection(); services.Scan(s => s.FromAssemblyOf<IProductService>() .AddClasses(c => c.AssignableTo<IProductService>()) .AsImplementedInterfaces() ); var serviceProvider = services.BuildServiceProvider(); _productServices = serviceProvider.GetServices<IProductService>(); } public IProductService GetProductService(string productName) { var productService = _productServices.SingleOrDefault(p => productName.Equals(p.ProductName, StringComparison.InvariantCultureIgnoreCase)); if (productService is null) { throw new ArgumentException(productName); } return productService; } } interface IProductService { string ProductName { get; } } class ProductService1 : IProductService { public string ProductName => "product1"; } class ProductService2 : IProductService { public string ProductName => "product2"; } class ProductService3 : IProductService { public string ProductName => "product3"; } 还有一些其他技术可能效率更高或更低一些,或者可以更好地处理你的范围界定需求,但我想说这已经是一个很大的改进了。

回答 1 投票 0

Mod-wsgi 调用 Flask 工厂函数两次

我正在尝试构建一个 Flask 应用程序并使用 mod_wsgi 服务器进行托管。我使用工厂函数来创建 Flask 应用程序,但我观察到 mod-wsgi 在同一个

回答 1 投票 0

如何从父对象创建子对象并分配一些字段

我是Java新手,想收集一些想法,因为我卡住了。 我有一些家长课,比方说 @数据 公共类 Person 实现 Hometown { 私有字符串名称; 私人

回答 1 投票 0

如何使用Factory设计模式来设计类似亚马逊购物的系统? [已关闭]

我一直在阅读亚马逊购物网站的系统设计,例如教育系统,解决方案中提到 在亚马逊网上购物系统中,我们可以使用Factory设计模板...

回答 1 投票 0

Spring Bean Factory 使用类名

我有一个像这样的接口/实现: 公共接口处理器{ void processMessage(消息 m); } @成分 公共类 FooAProcessor 实现处理器 { 私人 FooA fooA; ...

回答 1 投票 0

Android工作管理器工厂仅返回一种类型的worker

我的应用程序中有 2 个 workManager 工作人员。我为数据库操作DatabaseSyncWorker添加了一个新的worker。数据库同步工作线程需要一个额外的参数作为 DI 的一部分。所以我创建了一个workerFactory类...

回答 1 投票 0

设计复杂的验证框架:从工厂找到正确的验证器

我正在设计一个验证框架,它将根据我传递给 Validator 类的对象处理许多不同类型的验证。下面是基于工厂模式的实现...

回答 1 投票 0

Python,以正确的方式进行条件导入

现在我有一堂课叫A。 我有一些这样的代码.. 从 my.package.location.A 导入 A ... foo = A.doSomething(bar) 这很棒。 但现在我有一个新版本的 A 叫做 A,但是...

回答 5 投票 0

如何在宏中声明枚举值?

序言:这个问题比较高级,直接回答问题不觉得有压力。例如,如果您相信更好的设计方法,请告诉我。 为什么我们需要

回答 0 投票 0

如何动态选择在依赖注入中使用的具体类

我通常会为我的 DI 写这样的东西: var serviceProvider = new 服务集合() .AddSingleton() .AddSingleton<

回答 0 投票 0

不使用 for 循环生成具有随机数据的数组

我正在使用 faker.js 库生成随机数据,我有几个工厂函数可以生成一系列用户数据: const createUser = () => { 返回 { 姓名:faker.name.

回答 5 投票 0

为输入的重叠排列/组合创建可重用的类

我遇到了一个设计问题,我有不同的实现来保存数据和处理不同工具的其他事情。我使用工厂设计来保存数据,在 g 中也是如此......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.