0

Ich bin neu in IOC.Wie Eigenschaften injizieren, wenn Castle Windsor

Ich habe MethodProfilerAspectAttribute Attribut, das auf einem beliebigen Verfahren wie diese

[MethodProfilerAspectAttribute(5)] 
public void MethodName(){} 

hier angewendet werden muss, ist die Umsetzung von MethodProfilerAspectAttribute

[Serializable] 
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] 
public sealed class MethodProfilerAspectAttribute : OnMethodBoundaryAspect 
{ 
     public ILogger logger { get; set; } 
     public int x{get;set;} 
     public MethodProfilerAspectAttribute(int x) 
     { 
      this.x=x; 
     } 
    public override void OnSuccess(MethodExecutionArgs args) 
     { 
      logger.CustomLogging("logMe"); 
      base.OnSuccess(args); 
     } 
} 

Ich möchte meine ILogger Abhängigkeit, die mit Log4NetLogger lösen ist Die Abhängigkeiten von Konstruktoren werden korrekt registriert und aufgelöst, indem folgendermaßen vorgegangen wird:

container.Register(Component.For<ILogger>().ImplementedBy(typeof(Log4NetLogger))); 

aber leider funktioniert nichts, was ich versucht habe, um die Abhängigkeit von Eigenschaften zu lösen.

Jede Hilfe würde sehr geschätzt werden.

+0

Mögliche Duplikate von [Unity-Eigenschaft Injection auf AuthorizeAttribute] (http://stackoverflow.com/questions/29915192/unity-property-injection-on-authorizeattribute) – qujck

+0

@qujck, Nein, es ist nicht. Erstens erwarte ich, dass es eine Lösung für Castle Windsor ist, nicht die Einheit. Zweitens, die watever-Methode, die ich gesehen habe, funktioniert nicht. Ich erwarte nur den Code für Castle Windsor (C#). –

+0

Darüber hinaus löst dieser Link mein Problem nicht –

Antwort

0

Der Link, den Sie angegeben haben, beschreibt lediglich die Eigenschafteninjektion für Komponenten, die aus dem Container aufgelöst werden. Attribute werden nicht vom Container aufgelöst, sondern von der CLR erstellt. Sie können möglicherweise eine Möglichkeit zum Festlegen von Attributeigenschaften durch Bereitstellen einer benutzerdefinierten IContributeComponentModelConstruction Implementierung, aber ich bin mir nicht so sicher. Antworten auf ähnliche Fragen finden Sie unter here, here und here (vom Hersteller von Windsor).

In jedem Fall, Attribute ist nicht, wo Sie Funktionalität setzen möchten. Sie sollten minimal sein und nur Metadaten bereitstellen. Ich sehe hier, dass Sie versuchen, irgendeine Art von Funktionalität über alle Methodenaufrufe hinweg bereitzustellen. Sie sollten Windsor interceptors berücksichtigen, um ein ähnliches Verhalten zu erzielen.