Я хочу обновлять файл журнала (txt) каждый раз, когда вызываются методы класса интерфейса? Есть ли способ сделать это иначе, чем писать код в каждом методе для создания журнала?Создавать журнал каждый раз Когда методы в классе интерфейса называются
ответ
Я думаю, вам нужно будет использовать Aspect Oriented Programming для достижения этого. Читать http://www.sharpcrafters.com/aop.net
Я думаю, что вы имели в виду класс (вместо интерфейса) двух вариантов я могу думать:
Реализация INotifyPropertyChanged, который находится в строках написания кода в каждом методе
или
для принятия в AOP рамок в статье http://www.codeproject.com/KB/cs/AOP_Frameworks_Rating.aspx, если это не основной документ ap
Можете ли вы предоставить мне более прямой пример? –
Ссылка для INotifyPropertyChanged: http://msdn.microsoft.com/en-us/library/ms229614.aspx для других систем AOP, соответствующие сайты имеют хорошие примеры. – Chandu
Это помогает .. большое спасибо –
Вот мои 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();
}
надеюсь, что это поможет!
спасибо за ваше время micheal .. я сейчас попробую этот из !! –
Прошу прощения, я новичок asp.net, вы можете предоставить мне более прямой пример? –