大多数定义说:
抽象工厂提供了一个接口,用于创建相关对象的族,而无需指定其具体类
抽象工厂模式的用途是什么,因为我们可以通过创建具体类本身的对象来实现任务.为什么我们有一个工厂方法来创建Concrete类的对象?
请提供我必须实现abstractFactory模式的任何现实生活示例?
我使用Microsoft的Unity进行依赖注入,我想做这样的事情:
IDataContext context = _unityContainer.Resolve<IDataContext>();
var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context
var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context
IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance
var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2);
Run Code Online (Sandbox Code Playgroud)
RepositoryA并且RepositoryB都有一个带IDataContext参数的构造函数,我希望Unity使用我传递它的上下文初始化存储库.另请注意,IDataContext未在Unity中注册(我不想要3个实例IDataContext).
.net c# dependency-injection unity-container constructor-injection
我有一个数据库关系,如下所示.域对象是基于LINQ to SQL ORM创建的.
付款包括现金付款和礼品券付款.假设购买总额为550.可以按以下组件支付
1 Gift Coupon Valued 300
1 Gift Coupon Valued 200
I Cash Currency Valued 50
Run Code Online (Sandbox Code Playgroud)

我正在使用ORM的"InsertOnSubmit"功能插入新的付款记录.以下代码工作正常.但是,如果我公司使用信用卡引入新的支付组件,我需要更改我的"付款"域类.如何使支付类打开以进行扩展并关闭仍在使用ORM的更改?
注意:Payment类具有行为(例如GetTotalAmountCollected).我正在努力使"付款"类满足OCP.
注意:优惠券类型有特定的行为.优惠券发行日期是否小于2000年1月1日,它不应用于计算总金额(即,CouponValue应为零).请参阅使用策略模式重构代码.
注意:我使用的是.Net 4.0
参考:
C#代码:
public class PaymentAppService
{
public RepositoryLayer.ILijosPaymentRepository Repository { get; set; }
public void MakePayment()
{
DBML_Project.Payment paymentEntity = new DBML_Project.Payment();
paymentEntity.PaymentID = 1;
paymentEntity.PaymentType = "PurchaseP";
DBML_Project.CashPayment cashObj = new …Run Code Online (Sandbox Code Playgroud)