mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-23 04:43:35 +08:00
Refactoring ModelDriver to favor composition over inheritance. Introduces idea of IModelFilter.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041298
This commit is contained in:
@@ -6,7 +6,7 @@ using Orchard.Security;
|
||||
using Orchard.Services;
|
||||
|
||||
namespace Orchard.Core.Common.Models {
|
||||
public class CommonDriver : ModelDriverWithRecord<CommonRecord> {
|
||||
public class CommonDriver : ModelDriver {
|
||||
private readonly IClock _clock;
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
private readonly IModelManager _modelManager;
|
||||
@@ -15,40 +15,35 @@ namespace Orchard.Core.Common.Models {
|
||||
IRepository<CommonRecord> repository,
|
||||
IClock clock,
|
||||
IAuthenticationService authenticationService,
|
||||
IModelManager modelManager)
|
||||
: base(repository) {
|
||||
IModelManager modelManager) {
|
||||
|
||||
_clock = clock;
|
||||
_authenticationService = authenticationService;
|
||||
_modelManager = modelManager;
|
||||
|
||||
AddOnCreating<CommonModel>(SetCreateTimesAndAuthor);
|
||||
Filters.Add(new StorageFilterForRecord<CommonRecord>(repository));
|
||||
AddOnLoaded<CommonModel>(LoadOwnerModel);
|
||||
}
|
||||
|
||||
protected override void Create(CreateModelContext context) {
|
||||
var instance = context.Instance.As<CommonModel>();
|
||||
if (instance != null && instance.Record != null) {
|
||||
if (instance.Record.CreatedUtc == null) {
|
||||
instance.Record.CreatedUtc = _clock.UtcNow;
|
||||
}
|
||||
if (instance.Record.ModifiedUtc == null) {
|
||||
instance.Record.ModifiedUtc = _clock.UtcNow;
|
||||
}
|
||||
if (instance.Record.OwnerId == 0) {
|
||||
instance.Owner = _authenticationService.GetAuthenticatedUser();
|
||||
if (instance.Owner != null)
|
||||
instance.Record.OwnerId = instance.Owner.Id;
|
||||
}
|
||||
void SetCreateTimesAndAuthor(CreateModelContext context, CommonModel instance) {
|
||||
if (instance.Record.CreatedUtc == null) {
|
||||
instance.Record.CreatedUtc = _clock.UtcNow;
|
||||
}
|
||||
if (instance.Record.ModifiedUtc == null) {
|
||||
instance.Record.ModifiedUtc = _clock.UtcNow;
|
||||
}
|
||||
if (instance.Record.OwnerId == 0) {
|
||||
instance.Owner = _authenticationService.GetAuthenticatedUser();
|
||||
if (instance.Owner != null)
|
||||
instance.Record.OwnerId = instance.Owner.Id;
|
||||
}
|
||||
|
||||
base.Create(context);
|
||||
}
|
||||
|
||||
protected override void Loaded(LoadModelContext context) {
|
||||
var instance = context.Instance.As<CommonModel>();
|
||||
if (instance != null && instance.Record != null) {
|
||||
if (instance.Record.OwnerId != 0) {
|
||||
instance.Owner = _modelManager.Get(instance.Record.OwnerId).As<IUser>();
|
||||
}
|
||||
void LoadOwnerModel(LoadModelContext context, CommonModel instance) {
|
||||
if (instance.Record.OwnerId != 0) {
|
||||
instance.Owner = _modelManager.Get(instance.Record.OwnerId).As<IUser>();
|
||||
}
|
||||
base.Loaded(context);
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,8 +3,9 @@ using Orchard.Data;
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Core.Common.Models {
|
||||
public class RoutableDriver : ModelDriverWithRecord<RoutableRecord> {
|
||||
public RoutableDriver(IRepository<RoutableRecord> repository) : base(repository) {
|
||||
public class RoutableDriver : ModelDriver {
|
||||
public RoutableDriver(IRepository<RoutableRecord> repository) {
|
||||
Filters.Add(new StorageFilterForRecord<RoutableRecord>(repository));
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,15 +3,10 @@ using Orchard.Data;
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Core.Settings.Models {
|
||||
public class SiteDriver : ModelDriverWithRecord<SiteSettingsRecord> {
|
||||
public SiteDriver(IRepository<SiteSettingsRecord> repository)
|
||||
: base(repository) {
|
||||
}
|
||||
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "site") {
|
||||
context.Builder.Weld<SiteModel>();
|
||||
}
|
||||
public class SiteDriver : ModelDriver {
|
||||
public SiteDriver(IRepository<SiteSettingsRecord> repository){
|
||||
Filters.Add(new ActivatingFilter<SiteModel>("site"));
|
||||
Filters.Add(new StorageFilterForRecord<SiteSettingsRecord>(repository));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user