Ein völlig anderer Ansatz ist die Verwendung des Dekorationsmusters für Ihre Repositories.
Sagen wir, ich habe
public interface IRepository<EntityType> where EntityType:IAuditably
{
public void Save(EntityType entity);
}
Dann hätten wir unser NHibernateRepository:
public class NHibernateRepository<EntityType>:IRepository<EntityType>
{
/*...*/
public void Save ( EntityType entity )
{
session.SaveOrUpdate(entity);
}
}
Dann könnten wir ein Auditing Repository einrichten:
public class AuditingRepository<EntityType>:IRepository<EntityType>
{
/*...*/
public void Save ( EntityType entity )
{
entity.LastUser = security.CurrentUser;
entity.LastUpdate = DateTime.UtcNow;
innerRepository.Save(entity)
}
}
Mit einem IoC-Framework (StructureMap, Castle Windsor, NInject) könnten Sie dann alles aufbauen, ohne dass der Rest Ihres Codes je erfährt, dass Sie Auditing betreiben.
O