Ich möchte jedes Mal eine Protokolldatei (txt) aktualisieren, wenn Methoden in einer Interface-Klasse aufgerufen werden? Gibt es eine Möglichkeit, dies zu tun, außer Code in jede Methode zu schreiben, um ein Protokoll zu erstellen?Immer ein Protokoll erstellen Wenn Methoden in einer Interface-Klasse aufgerufen werden
Antwort
Ich denke, dass Sie Aspect Oriented Programmierung verwenden müssen, um das zu erreichen. Lesen http://www.sharpcrafters.com/aop.net
Ich glaube, Sie Klasse gemeint (statt Schnittstelle) Zwei Optionen, die ich denken kann:
Implementierung INotifyPropertyChanged, die in jedem Verfahren in den Zeilen Code zu schreiben ist
oder
zu einem der AOP Frameworks in den Artikel http://www.codeproject.com/KB/cs/AOP_Frameworks_Rating.aspx adoptieren, wenn das keine große le ap
Können Sie mir ein direkteres Beispiel geben? –
Link für INotifyPropertyChanged: http://msdn.microsoft.com/en-us/library/ms229614.aspx für die anderen AOP-Frameworks, die entsprechenden Seiten haben gute Beispiele. – Chandu
Das hilft ... Vielen Dank –
Hier sind meine 30 Minuten. Sie müssen den Protokollierungscode irgendwo implementieren, damit Sie eine weitere Abstraktion für Ihren Code erstellen müssen. Daher wird eine abstrakte Klasse benötigt. Ich denke. Das ist sehr schnell und schmutzig.
public interface IService<T>
{
List<T> GetAll();
bool Add(T obj);
}
dann werden Sie die abstrakte Klasse brauchen, wo Sie Ihre Protokollfunktion
public abstract class Service<T> : IService<T>
{
private void log()
{
/// TODO : do log routine here
}
public bool Add(T obj)
{
try
{
log();
return AddWithLogging(obj);
}
finally
{
log();
}
}
public List<T> GetAll()
{
try
{
log();
return GetAllWithLog();
}
finally
{
log();
}
}
protected abstract List<T> GetAllWithLog();
protected abstract bool AddWithLogging(T obj);
}
wie für Ihre konkreten Klassen zu implementieren, benötigen
public class EmployeeService : Service<Employee>
{
protected override List<Employee> GetAllWithLog()
{
return new List<Employee>() { new Employee() { Id = 0, Name = "test" } };
}
protected override bool AddWithLogging(Employee obj)
{
/// TODO : do add logic here
return true;
}
}
public class CompanyService : Service<Company>
{
protected override List<Company> GetAllWithLog()
{
return new List<Company>() { new Company() { Id = 0, Name = "test" } };
}
protected override bool AddWithLogging(Company obj)
{
/// TODO : do add logic here
return true;
}
}
public class Employee
{
public int Id {get;set;}
public string Name { get; set;}
}
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
}
dann auf Ihre Implementierung können Sie nur ..
static void Main(string[] args)
{
IService<Employee> employee = new EmployeeService();
List<Employee> employees = employee.GetAll();
foreach (var item in employees)
{
Console.WriteLine(item.Name);
}
IService<Company> company = new CompanyService();
List<Company> companies = company.GetAll();
foreach (var item in companies)
{
Console.WriteLine(item.Name);
}
Console.ReadLine();
}
hoffe das hilft!
danke für deine Zeit michael .. ich werde jetzt dieses eine ausprobieren .. !! –
- 1. Wie ermittelt man, welche Methoden in einer Methode aufgerufen werden?
- 2. Welche Methoden werden aufgerufen, wenn ich versuche, ein benutzerdefiniertes Objekt mit einer Zeichenfolge zu vergleichen?
- 3. Werden statische Methoden immer im Speicher gehalten?
- 4. Welche Android-Methoden werden aufgerufen, wenn die Batterie ausgeht?
- 5. Welche Sicherheitsprobleme entstehen, wenn Methoden mit Reflektion aufgerufen werden?
- 6. Warum sollte() warten immer in einer Schleife aufgerufen werden
- 7. Warum werden UITableView-Methoden vor viewWillAppear aufgerufen?
- 8. Können andere Methoden nach finalize() aufgerufen werden?
- 9. UIDocumentInteractionControllerDelegate-Methoden werden nicht aufgerufen, wenn sie für die Freigabe einer App geteilt werden
- 10. Werden viewDidUnload und dealloc immer aufgerufen, wenn ein UIViewController abgerissen wird?
- 11. URLConnection Delegate-Methoden werden nicht aufgerufen
- 12. Signal R Client Methoden werden nicht aufgerufen
- 13. Delegierte Methoden werden nicht aufgerufen? (CoreBluetooth)
- 14. UITextViewDelegate-Methoden werden nicht aufgerufen (UITextView innerhalb von UITableViewCell)
- 15. AngularJS: $ ressource benutzerdefinierte Methoden werden nicht aufgerufen
- 16. Methoden für Char können nicht aufgerufen werden
- 17. UICollectionViewDataSource-Methoden werden nicht aufgerufen, wenn die Datenquelle eine separate Klasse ist
- 18. Warum werden nicht verwandte (Autopostback-) Methoden aufgerufen, wenn eine Asp.Net-ListBox-Autopostback-Methode aufgerufen wird?
- 19. Werden Attribute immer vor Methoden in C# ausgeführt?
- 20. Wie Methoden in Parent-Komponente von Child-Komponente aufgerufen werden?
- 21. alert() aufgerufen neues Fenster scheint von der ursprünglichen Seite aufgerufen werden, wenn jQuery Methoden verwenden
- 22. SocketRocket Delegate Methoden nicht aufgerufen, wenn in Framework
- 23. In Objective-C, wenn addObjectAtIndex aufgerufen wird, um das Array zu erstellen, muss initWithCapacity aufgerufen werden?
- 24. Erstellen von Methoden in hat-ein-Beziehungen
- 25. Sicherstellen, dass Methoden immer nur vom Hauptthread ausgeführt werden
- 26. Implementieren Sie UITextFieldDelegate-Methoden in einem Protokoll
- 27. onKeyDown nicht immer in Android App aufgerufen
- 28. Beim Ausführen einer Anwendung, wenn ein Anruf kommt, wie behandelt und welche Methoden aufgerufen?
- 29. Echte Welt Beispiele für @optional Protokoll Methoden
- 30. Müssen statische Methoden synchronisiert werden, wenn sie innerhalb der synchronisierten nicht statischen Methode aufgerufen werden?
Es tut mir leid, ich bin ein Asp.net-Neuling können Sie mir ein direkteres Beispiel geben? –