所以我的难题是,为了从add_action( 'woocommerce_before_calculate_totals','conditionally_auto_add_coupon', 30, 1 );
function conditionally_auto_add_coupon( $cart ) {
if ( is_admin() && !defined('DOING_AJAX') ) return; // Exit
// HERE set the coupon code (in lowercase)
$coupon_code = 'mycode';
$total_item = 0;
if (WC()->cart->has_discount('mycode')) {
foreach( $cart->get_cart() as $cart_item ){
$total_item++;
}
if($total_item < 2){
$cart->remove_coupon( $coupon_code );
wc_add_notice( __('you have only 1 item in cart'), 'alert');
}
else{
$cart->add_discount( $coupon_code );
wc_add_notice( __('coupon added'), 'notice');
}
}
}
访问IntThing
或StringThing
的{{1}},我要定义一个与{{1} },并将其用作对MyProperty
中UtilityThing<T>
的一般约束。这是可行的,但是鉴于抽象库中已经定义了相同的属性,因此似乎是多余的。我是否在这里缺少设计方面,或者这实际上是在这种情况下所需的设计方式?
MyProperty
答案 0 :(得分:2)
您需要引入一个新的泛型类型。引入新类型后,您就可以消除对接口的需求。
public class UtilityThing<T, I> where T : Thing<I>, new()
{
public T DoIt(SomeContext someContext, string name)
{
string contextVal = someContext.GetValue(name);
var thing = new T { MyProperty = contextVal };
return thing;
}
}
您可以像这样使用它:
var utility = new UtilityThing<IntThing, int?>();