我使用的是asp.net MVC应用程序,在该应用程序中有一个界面
但该接口位于第三方DLL中。所以我无法修改界面。
#region Assembly Sana.Commerce, Version=9.1.3.0, Culture=neutral, PublicKeyToken=2b26dc7ce8e04e9f
// D:\visualstudio2015\Sana Training\SDK\SDK\Libraries\Sana.Commerce.dll
#endregion
using System;
using System.Collections.Generic;
using Sana.Commerce.Customer;
using Sana.Commerce.Shop;
namespace Sana.Commerce.Order
{
//
// Summary:
// This interface represents an order in the ERP system. This can be an order that
// still has to be placed or an order that is already in the ERP (for example order
// history). There are several types of orders like regular orders, invoice and
// quotes. The type of order is stored in the document type property.
public interface IOrder : IEntity, IVersionedItem
{
//
// Summary:
// ID of the account that placed the order.
string AccountId { get; set; }
//
// Summary:
// The type of account that placed this order.
AccountType AccountType { get; set; }
//
// Summary:
// Gets or sets the list of order attachments.
IList<IAttachment> Attachments { get; set; }
//
// Summary:
// Gets or sets the status of order authorization.
OrderAuthorizationStatus AuthorizationStatus { get; set; }
//
// Summary:
// Address that will recieve the invoice.
ICustomerAddress BillingAddress { get; set; }
//
// Summary:
// Gets or sets bill-to name.
string BillToName { get; set; }
//
// Summary:
// Gets or sets the comment.
string Comment { get; set; }
//
// Summary:
// Name of the Contact that placed this order.
string Contact { get; set; }
//
// Summary:
// ID of the Contact that placed this order.
string ContactId { get; set; }
}
}
但在IOrder
中,我必须添加额外的属性ProjectNumber
。
但是如果它在另一个DLL中,如何扩展IOrder
接口?
我这样试试:
public interface IOrderProjectNumber:IOrder
{
string ProjectNumber { get; set; }
}
但是我有一个方法,就像这样:
public override IOrder SaveOrder(IOrder order)
{
IOrderProjectNumber orderNumber= new OrderoverviewModel_ProjectNumber();
orderNumber.ProjectNumber = "hallo";
return base.SaveOrder(order);
}
所以我用这个改变方法:
public override IOrder SaveOrder(IOrderProjectNumber order)
{
IOrderProjectNumber orderNumber= new OrderoverviewModel_ProjectNumber();
orderNumber.ProjectNumber = "hallo";
return base.SaveOrder(order);
}
但后来我收到了错误:
代码描述项目文件行列抑制状态 CS0115'ExtendedOrderManager.SaveOrder(IOrderProjectNumber)':不 找到合适的方法 覆盖Sana.Commerce.Sdk D:\ visualstudio2015 \ Sana Training \ SDK \ SDK \ Sana.Commerce.Sdk \ Customization \ Order \ ExtendedOrderManager.cs 19 32 Active
它将像xml一样保存:
<Order>
<field name="BlanketOrderId" type="System.String, mscorlib" storeWithEntity="True">
<string>BO1</string>
</field>
<field name="CustomField" type="System.String, mscorlib" storeWithEntity="False">
<string>myvalue</string>
</field>
<field name="PaymentStatus" type="System.String, mscorlib">
<string>new</string>
</field>
<field name="ProjectNumber" type="Null" />
<field name="BillingAddress" type="Sana.Commerce.Customer.CustomerAddress, Sana.Commerce.Sdk">
<CustomerAddress>
<field name="CustomerId" type="System.String, mscorlib">
<string>01454545</string>
</field>
<field name="Address" type="System.String, mscorlib">
<string>705 West Peachtree Street</string>
</field>
<field name="Address2" type="System.String, mscorlib">
<string />
</field>
<field name="ZipCode" type="System.String, mscorlib">
<string>US-GA 31772</string>
</field>
<field name="City" type="System.String, mscorlib">
<string>Atlanta</string>
</field>
<field name="CountryId" type="System.String, mscorlib">
<string>US</string>
</field>
<field name="CountryName" type="System.String, mscorlib">
<string>Verenigde Staten</string>
</field>
<field name="State" type="System.String, mscorlib">
<string />
</field>
<field name="PhoneNo" type="System.String, mscorlib">
<string />
</field>
<field name="FaxNo" type="System.String, mscorlib">
<string />
</field>
<field name="Contact" type="System.String, mscorlib">
<string>Ms. Tammy L. McDonald</string>
</field>
<field name="ContactId" type="Null" />
<field name="Name" type="System.String, mscorlib">
<string>New Concepts Furniture</string>
</field>
<field name="Id" type="Null" />
<field name="WebsiteId" type="Null" />
</CustomerAddress>
</field>
并在Order类中。我把额外的财产:
public class Order : Entity, IOrder
{
#region Properties
/// <summary>
/// Status of the Payment of this order.
/// </summary>
[DataMember]
public string PaymentStatus { get; set; }
[DataMember]
[XmlField]
public string ProjectNumber { get; set; }
}
系统使用依赖注入以及注册模型和控制器的位置。注册新类将在Addone类中完成,如下所示:
public class Addon : IAddon
{
public int Order
{
get { return 0; }
}
public void Initialize()
{
ObjectManager.RegisterType<IController, ReturnOrdersController>("ReturnOrders");
ObjectManager.RegisterType<OrderOverviewModel, OrderoverviewModel_ProjectNumber>();
}
}
这是OrderoverViewModel:
//
// Summary:
// The order overview page model.
public class OrderOverviewModel : CheckoutBaseViewModel
{
public OrderOverviewModel();
//
// Summary:
// Gets or sets a value indicating that the terms and conditions is confirmed.
[MustBeTrue(ErrorMessageResourceName = "OrderOverview_AgreeTermsError")]
public virtual System.Boolean AcceptTerms { get; set; }
//
// Summary:
// Gets or sets the comments.
[AllowHtml]
[DataType(DataType.MultilineText)]
[Display(Name = "Comments")]
[MaxLength(2048, ErrorMessageResourceName = "Validation_MaxLength")]
public virtual System.String Comments { get; set; }
//
// Summary:
// Gets or sets the delivery date.
[Display(Name = "RequestedDeliveryDate")]
[GreaterThanToday(ErrorMessageResourceName = "Validation_InvalidField")]
public virtual Date? DeliveryDate { get; set; }
//
// Summary:
// Gets or sets a value indicating that the order will be paid online.
public virtual System.Boolean IsPaidOnline { get; set; }
//
// Summary:
// Gets or sets the reference number.
[AllowHtml]
[Display(Name = "ReferenceNumber")]
[MaxLength(20, ErrorMessageResourceName = "Validation_MaxLength")]
public virtual System.String ReferenceNumber { get; set; }
//
// Summary:
// Gets or sets a value indicating whether additional information will be visible.
public virtual System.Boolean ShowAdditionalInformation { get; set; }
//
// Summary:
// Applies the model changes to the specified basket.
//
// Parameters:
// basket:
// The basket to update.
//
// Returns:
// Returns a value indicating whether any changes have been done to the basket.
public virtual System.Boolean ApplyChanges(IBasket basket);
//
// Summary:
// Initializes the model using the specified basket.
//
// Parameters:
// basket:
// The basket.
public virtual void Initialize(IBasket basket);
//
// Summary:
// Initializes the model.
//
// Parameters:
// context:
// The shop context.
//
// generalInfo:
// The checkout general info model.
public virtual void InitializeGeneral(ShopContext context, CheckoutGeneralInfo generalInfo);
}
这仍然是空的:
public interface IOrderProjectNumber : IOrder
{
string ProjectNumber { get; set; }
//public virtual IOrder SaveOrder(IOrder order);
}
var orderObject = order as DomainModel.Order.IOrderProjectNumber;
orderObject仍然为null。我不明白。
答案 0 :(得分:0)
您的SaveOrder方法应如下所示:
public override IOrder SaveOrder(IOrder order)
{
var orderObject = order as Order;
if(orderObject != null)
{
orderObject.ProjectNumber = "hallo";
}
return base.SaveOrder(order);
}