属性を使用して、メソッドが呼び出されないようにすることはできますか?

ライアン

Transaction.Currentnullの場合にメソッドが呼び出されないようにするメソッドに適用できるカスタム属性を作成しようとしています。現在、その項目がnullの場合に例外をスローする基本的な属性クラスがあります。ここにあります:

[AttributeUsage(AttributeTargets.Method)]
public class RequiresTransactionAttribute : System.Attribute
{
    public RequiresTransactionAttribute()
    {
        if (Transaction.Current == null)
        {
            throw new Exception("requires transaction");
        }
    }
}

問題は、これによってメソッド呼び出しがテストで失敗しないことです。

これらの属性はメタデータに変換されることを読みました。そのため、特にリフレクションを使用して属性を実行しない限り、このコンストラクターは最適化されているため、実行されません。

属性アプローチを使用した私のような要件、またはおそらく他のより良いメソッドに基づいてメソッドが呼び出されるのを防ぐことは可能ですか?

マーク・グラヴェル

非常に少数の例外(JITが彼らのために探しているランタイムによる作り付けの振る舞いと属性-のような[MethodImpl(...)]またはコード・アクセス・セキュリティ属性)、属性は完全に不活性で-彼らは、メタデータとして純粋に存在します。リフレクションを使用してインスタンス化しない限り、オブジェクトとしてインスタンス化されることはありません。

だから、何も:あなたはこのような実行時の動作に影響を与えることはできませんしない限り、あなたはフレームワークを使用している方法の外に出る方法そのフレームワーク自体のチェックを経て属性を探すために、それらをインスタンス化し、実行可能なコードとして扱います。ASP.NET MVCは、これを行うフレームワークの例です。

もう1つのオプションは、ポストシャープなどのILリライターです。この場合、属性は、織り中に追加のコードを挿入するための一般的なフックです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Mockitoを使用して特定のメソッドが呼び出されなかったことを確認するにはどうすればよいですか?

分類Dev

XCTAssertを使用してクラスメソッドが呼び出されていることを確認するにはどうすればよいですか?

分類Dev

Mockitoを使用して、メソッドが特定の引数で呼び出されたことを確認するにはどうすればよいですか?

分類Dev

Moqを使用してメソッドが特定の回数呼び出されたことを確認するにはどうすればよいですか?

分類Dev

Moqを使用してメソッドが特定の回数呼び出されたことを確認するにはどうすればよいですか?

分類Dev

ILogger <T> .Log拡張メソッドがMoqを使用して呼び出されたことを確認するにはどうすればよいですか?

分類Dev

インスタンスメソッドを静的メソッドとして呼び出せないようにすることはできますか?

分類Dev

クラスのメソッドが呼び出されていないことを確認するにはどうすればよいですか?

分類Dev

JSONDecoder.decodeメソッドを使用しているときにDecodableのinitメソッドが呼び出されないのはなぜですか?

分類Dev

ScalaTestとScalaMockを使用して、モックされたメソッドが呼び出されないことを表明するにはどうすればよいですか?

分類Dev

any_instanceなしでメソッド呼び出しが行われなかったことを表明するにはどうすればよいですか?

分類Dev

デバイスのロックが解除されようとしているときに呼び出されるメソッドはどれですか?

分類Dev

呼び出されたメソッドが、呼び出し側が既にロックしているのと同じロックを使用する場合に、デッドロックを回避するにはどうすればよいですか?

分類Dev

メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?

分類Dev

メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?

分類Dev

メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?

分類Dev

メソッド呼び出しが適切なオブジェクトで適切なメソッド名を使用していることを確認するにはどうすればよいですか?

分類Dev

Prism EventAggregatorを使用しているときにSubscribeメソッドが呼び出されないのはなぜですか?

分類Dev

変数に格納されている値をメソッド呼び出しとして使用するにはどうすればよいですか?

分類Dev

使用したいメソッドにInvokeを使用すると、それを呼び出すことができなくなりますか?

分類Dev

静的メソッドが正確な引数で呼び出されたことを確認するにはどうすればよいですか?

分類Dev

静的メソッドが正確な引数で呼び出されたことを確認するにはどうすればよいですか?

分類Dev

OCMockを使用して、Objective Cで非同期メソッドが呼び出されないことを確認するにはどうすればよいですか?

分類Dev

同じパラメーターとメソッド名を使用して、コントローラーはASP.NET CoreMVCで呼び出されるものをどのように見つけることができますか

分類Dev

親クラスの関数がclassmethodまたはインスタンスメソッドによって子クラスから呼び出されていることをどのように知ることができますか?

分類Dev

メソッド呼び出しを連鎖させるためにメソッドが「self」を返すようにするのは良いことですか?

分類Dev

ReactRootViewを使用してAndroidアクティビティにReactメソッドを公開し、React Native Javascriptから呼び出すことができるようにするにはどうすればよいですか?

分類Dev

私は明示的にあいまいなメソッド呼び出しを入力し、それを使用することはできますか?

分類Dev

{} .toString()のようなtoString()メソッドのリテラル呼び出しに異議を唱えることができないのはなぜですか?

Related 関連記事

  1. 1

    Mockitoを使用して特定のメソッドが呼び出されなかったことを確認するにはどうすればよいですか?

  2. 2

    XCTAssertを使用してクラスメソッドが呼び出されていることを確認するにはどうすればよいですか?

  3. 3

    Mockitoを使用して、メソッドが特定の引数で呼び出されたことを確認するにはどうすればよいですか?

  4. 4

    Moqを使用してメソッドが特定の回数呼び出されたことを確認するにはどうすればよいですか?

  5. 5

    Moqを使用してメソッドが特定の回数呼び出されたことを確認するにはどうすればよいですか?

  6. 6

    ILogger <T> .Log拡張メソッドがMoqを使用して呼び出されたことを確認するにはどうすればよいですか?

  7. 7

    インスタンスメソッドを静的メソッドとして呼び出せないようにすることはできますか?

  8. 8

    クラスのメソッドが呼び出されていないことを確認するにはどうすればよいですか?

  9. 9

    JSONDecoder.decodeメソッドを使用しているときにDecodableのinitメソッドが呼び出されないのはなぜですか?

  10. 10

    ScalaTestとScalaMockを使用して、モックされたメソッドが呼び出されないことを表明するにはどうすればよいですか?

  11. 11

    any_instanceなしでメソッド呼び出しが行われなかったことを表明するにはどうすればよいですか?

  12. 12

    デバイスのロックが解除されようとしているときに呼び出されるメソッドはどれですか?

  13. 13

    呼び出されたメソッドが、呼び出し側が既にロックしているのと同じロックを使用する場合に、デッドロックを回避するにはどうすればよいですか?

  14. 14

    メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?

  15. 15

    メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?

  16. 16

    メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?

  17. 17

    メソッド呼び出しが適切なオブジェクトで適切なメソッド名を使用していることを確認するにはどうすればよいですか?

  18. 18

    Prism EventAggregatorを使用しているときにSubscribeメソッドが呼び出されないのはなぜですか?

  19. 19

    変数に格納されている値をメソッド呼び出しとして使用するにはどうすればよいですか?

  20. 20

    使用したいメソッドにInvokeを使用すると、それを呼び出すことができなくなりますか?

  21. 21

    静的メソッドが正確な引数で呼び出されたことを確認するにはどうすればよいですか?

  22. 22

    静的メソッドが正確な引数で呼び出されたことを確認するにはどうすればよいですか?

  23. 23

    OCMockを使用して、Objective Cで非同期メソッドが呼び出されないことを確認するにはどうすればよいですか?

  24. 24

    同じパラメーターとメソッド名を使用して、コントローラーはASP.NET CoreMVCで呼び出されるものをどのように見つけることができますか

  25. 25

    親クラスの関数がclassmethodまたはインスタンスメソッドによって子クラスから呼び出されていることをどのように知ることができますか?

  26. 26

    メソッド呼び出しを連鎖させるためにメソッドが「self」を返すようにするのは良いことですか?

  27. 27

    ReactRootViewを使用してAndroidアクティビティにReactメソッドを公開し、React Native Javascriptから呼び出すことができるようにするにはどうすればよいですか?

  28. 28

    私は明示的にあいまいなメソッド呼び出しを入力し、それを使用することはできますか?

  29. 29

    {} .toString()のようなtoString()メソッドのリテラル呼び出しに異議を唱えることができないのはなぜですか?

ホットタグ

アーカイブ