【发布时间】:2020-01-04 07:55:59
【问题描述】:
我已经通过以下方式在 c# .Net 核心中实现了工厂方法。我有几个具体的产品,比如说 Gateway1 和 Gateway2
public interface IGateway
{
void Test();
}
ConcreteCreator:
public class PaymentFactory
{
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
private readonly IPaymentGatewayRepository _paymentGatewayRepository;
public PaymentFactory(IPaymentTransactionRepository paymentTransactionRepository,
IPaymentGatewayRepository paymentGatewayRepository)
{
_paymentTransactionRepository = paymentTransactionRepository;
_paymentGatewayRepository = paymentGatewayRepository;
}
public IGateway ExecuteCreation(string bank)
{
switch (bank)
{
case "Gateway1":
{
return new Gateway1(_paymentGatewayRepository);
}
case "Gateway2":
{
return new Gateway2(_paymentTransactionRepository, _paymentGatewayRepository);
}
default:
{
return null;
}
}
}
}
混凝土产品:
public class Gateway1 : IGateway
{
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
public Gateway1(IPaymentTransactionRepository paymentGatewayRepository)
{
_paymentGatewayRepository = paymentGatewayRepository;
}
public void Test()
{
//code
}
}
public class Gateway2 : IGateway
{
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
private readonly IPaymentGatewayRepository _paymentGatewayRepository;
public Gateway2(IPaymentTransactionRepository paymentGatewayRepository,
IPaymentGatewayRepository paymentGatewayRepository)
{
_paymentGatewayRepository = paymentGatewayRepository;
_paymentGatewayRepository = paymentGatewayRepository;
}
public void Test()
{
//code
}
}
此代码正在运行,但我想对其进行两处更改。
1- 如何通过反射实现工厂方法?
2- CreateConcreteProducts如何传入多个参数?
提前致谢。
【问题讨论】:
标签: c# .net design-patterns reflection .net-core