1

提供されたdllに変更を加えるために、IAspectProviderインターフェイスを使用し、必要なProvideAspectsメソッドを満たしました。なので

public class TraceAspectProvider : IAspectProvider {
    readonly SomeTracingAspect aspectToApply = new SomeTracingAspect();

    public IEnumerable ProvideAspects(object targetElement) {
        Assembly assembly = (Assembly)targetElement;
        List instances = new List();
        foreach (Type type in assembly.GetTypes()) {
            ProcessType(type, instances);
        }
        return instances;
    }
    void ProcessType(Type type, List instances) {
        foreach (MethodInfo targetMethod in type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)) {
            instances.Add(new AspectInstance(targetMethod, aspectToApply));
        }
        foreach (Type nestedType in type.GetNestedTypes()) {
            ProcessType(nestedType, instances);
        }
    }
}

これを実行している間、私はこれらのエラーを受け取ります

あなたの貴重なコメントを待っています

4

2 に答える 2

4

のドキュメントをProvideAspects()見ると、が返されることに気付くでしょうIEnumerable<AspectInstance>。そのため、コードでもこれを使用する必要があります。

public class TraceAspectProvider : IAspectProvider {
    readonly SomeTracingAspect aspectToApply = new SomeTracingAspect();

    public IEnumerable<AspectInstance> ProvideAspects(object targetElement) {
        Assembly assembly = (Assembly)targetElement;
        List<AspectInstance> instances = new List<AspectInstance>();
        foreach (Type type in assembly.GetTypes()) {
            ProcessType(type, instances);
        }
        return instances;
    }
    void ProcessType(Type type, List<AspectInstance> instances) {
        foreach (MethodInfo targetMethod in type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)) {
            instances.Add(new AspectInstance(targetMethod, aspectToApply));
        }
        foreach (Type nestedType in type.GetNestedTypes()) {
            ProcessType(nestedType, instances);
        }
    }
}
于 2012-06-05T12:48:56.477 に答える
1

あなたはこれのためにIEnumerable<SomeClass>そしてを使わなければなりませんList<someClass>yield returnまた、そのような状況で使用するために特別に作られたものもチェックしてください。

于 2012-06-05T12:40:32.903 に答える