我想在每次调用接口类中的方法时更新日志文件(txt)? 除了在每个方法中编写代码以创建日志之外,还有什么方法可以做到这一点吗?
答案 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();
}
希望这有帮助!
答案 1 :(得分:0)
我认为您必须使用面向方面编程来实现这一目标。阅读http://www.sharpcrafters.com/aop.net
答案 2 :(得分:0)
我认为你的意思是(而不是界面) 我能想到的两个选择:
实施 INotifyPropertyChanged ,这是在每个方法中编写代码的行
或强>
采用文章http://www.codeproject.com/KB/cs/AOP_Frameworks_Rating.aspx中的 AOP 框架,如果这不是一个重大飞跃