Unity v2.1 で Inteception パイプラインに使用している 3 つの属性があります。すべてが適切に起動しており、順序が間違っているだけです。
3 つの属性すべてで、対応する Handler に属性から Order を渡していることを確認しました。
したがって、以下の TestClass.TestProperty でセッターを呼び出すと、呼び出しハンドラーがValidation、Transaction、Notify の順序で呼び出されることを期待しています。私が見ているのはNotify, Transaction, Validationです。
グーグルを使っても答えが見つからないという 2 つの質問があります。
- TestClass.TestProperty を設定する私の例では、最初にプロパティ属性を呼び出し、次にクラス属性を呼び出すと仮定していますか? または、Unity は私の命令を尊重する必要がありますか?
2 つのプロパティ ハンドラーが最初に呼び出された場合、 Notify, Transactionは表示されません。Transaction と Notify Order のデフォルトをそれぞれ 1 と 2 にオーバーライドすると、期待どおりにTransaction, Notifyが得られます。私の注文が1から始まることは重要ですか.
[AttributeUsage(AttributeTargets.Class) public class ValidationAttribute : HandlerAttribute { public ValidationAttribute(int order = 1) { Order = order } public override ICallHandler CreateHandler(IUnityContainer container) { var ValidationHandler = container.Resolve<ValidationHandler>(); ValidationHandler.Order = Order; } } public class TransactionAttribute : HandlerAttribute { public TransactionAttribute (int order = 2) { Order = order } // Same CreateHandler as above resolving correct handler } public class NotifyAttribute : HandlerAttribute { public NotifyAttribute (int order = 3) { Order = order } // Same CreateHandler as above resolving correct handler } // Didn't include handler code to keep short(ish). All handlers have logging to show they are executing ... [Validation] public class TestClass { public int TestProperty { get; [Transaction] [Notify] set; } }