0

インターセプトに Unity コンテナーを使用しているため、[Trace] 属性を追加しようとしています。

パブリック クラス TraceAttribute : HandlerAttribute

コードでは、次のように使用できます。

public class MyClass
{
    [Trace]
    public void DoSomething()
    {
        ...
    }
}

私の質問/目標は次のとおりです。Trace 属性を Unity Interception に結び付けたくありません。後で DI コンテナーを変更したり、独自のコンテナーを実装したりする場合は、インターフェイスの場合と同じように交換したいと思います。

何かのようなもの:

パブリック インターフェイス TraceAttribute : ITraceAttribute

そして、特定の実装がありますか?それは可能ですか?

私たちが直面している課題の 1 つは、Trace 属性を使用するすべての場所で、Unity アセンブリをインストールする必要があり、それを避けたいということです。

ありがとう!

4

1 に答える 1

0

C# では、 attribute は class から直接的または間接的に派生したクラスである必要がありますSystem.Attribute。これは、標準ツールを使用してインターフェイスを属性として使用できないことを意味します。

あなたのシナリオでは、Unity から必要なインスタンスを作成する方法を持つ属性を作成することができます。これを MVC フィルターに使用している場合は、ここでこれを設定するシナリオを確認できます。他のケースではもっと複雑かもしれませんが、ある種のサービス ロケータを使用して実現できます。

于 2014-10-18T15:35:19.197 に答える