2010-12-30 2 views

Antwort

0

Ich denke, dass Sie Aspect Oriented Programmierung verwenden müssen, um das zu erreichen. Lesen http://www.sharpcrafters.com/aop.net

+0

Es tut mir leid, ich bin ein Asp.net-Neuling können Sie mir ein direkteres Beispiel geben? –

0

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

+0

Können Sie mir ein direkteres Beispiel geben? –

+0

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

+0

Das hilft ... Vielen Dank –

1

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!

+0

danke für deine Zeit michael .. ich werde jetzt dieses eine ausprobieren .. !! –

Verwandte Themen