2010-12-30 4 views

ответ

0

Я думаю, вам нужно будет использовать Aspect Oriented Programming для достижения этого. Читать http://www.sharpcrafters.com/aop.net

+0

Прошу прощения, я новичок asp.net, вы можете предоставить мне более прямой пример? –

0

Я думаю, что вы имели в виду класс (вместо интерфейса) двух вариантов я могу думать:

Реализация INotifyPropertyChanged, который находится в строках написания кода в каждом методе

или

для принятия в AOP рамок в статье http://www.codeproject.com/KB/cs/AOP_Frameworks_Rating.aspx, если это не основной документ ap

+0

Можете ли вы предоставить мне более прямой пример? –

+0

Ссылка для INotifyPropertyChanged: http://msdn.microsoft.com/en-us/library/ms229614.aspx для других систем AOP, соответствующие сайты имеют хорошие примеры. – Chandu

+0

Это помогает .. большое спасибо –

1

Вот мои 30 минут. вам придется где-то внедрить код ведения журнала, поэтому вам нужно создать еще одну абстракцию для вашего кода. поэтому необходим абстрактный класс. я думаю. это очень быстро и грязно.

public interface IService<T> 
{ 
    List<T> GetAll(); 
    bool Add(T obj); 
} 

тогда вам нужен абстрактный класс, где вам необходимо реализовать протоколирование рутинной

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); 
} 

, как для конкретных классов

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; } 
} 

затем на вашу реализации вы можете просто ..

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(); 
    } 

надеюсь, что это поможет!

+0

спасибо за ваше время micheal .. я сейчас попробую этот из !! –