--HG--
branch : dev
This commit is contained in:
Michael Dorian Bach
2010-10-15 17:44:10 -07:00
6 changed files with 31 additions and 21 deletions

View File

@@ -139,10 +139,12 @@ namespace Orchard.Setup {
[UsedImplicitly]
class SafeModeSiteWorkContextProvider : IWorkContextStateProvider {
public T Get<T>(string name) {
if (name == "CurrentSite")
return (T)(ISite) new SafeModeSite();
return default(T);
public Func<T> Get<T>(string name) {
if (name == "CurrentSite") {
ISite safeModeSite = new SafeModeSite();
return () => (T)safeModeSite;
}
return null;
}
}

View File

@@ -97,10 +97,10 @@ namespace Orchard.Environment {
}
public override T GetState<T>(string name) {
return (T)_state.GetOrAdd(name, x => GetStateInternal<T>(x));
return (T)_state.GetOrAdd(name, s => GetStateInternal<T>(s) == null ? default(T) : GetStateInternal<T>(s).Invoke());
}
private T GetStateInternal<T>(string name) {
private Func<T> GetStateInternal<T>(string name) {
return _workContextStateProviders.Select(wcsp => wcsp.Get<T>(name))
.FirstOrDefault(value => !Equals(value, default(T)));
}

View File

@@ -11,7 +11,7 @@ namespace Orchard {
}
public interface IWorkContextStateProvider : IDependency {
T Get<T>(string name);
Func<T> Get<T>(string name);
}
public interface IWorkContextScope : IDisposable {

View File

@@ -1,4 +1,6 @@
namespace Orchard.Security {
using System;
namespace Orchard.Security {
public class CurrentUserWorkContext : IWorkContextStateProvider {
private readonly IAuthenticationService _authenticationService;
@@ -6,10 +8,10 @@
_authenticationService = authenticationService;
}
public T Get<T>(string name) {
if (name == "CurrentUser")
return (T)_authenticationService.GetAuthenticatedUser();
return default(T);
public Func<T> Get<T>(string name) {
if (name == "CurrentUser")
return () => (T)_authenticationService.GetAuthenticatedUser();
return null;
}
}
}

View File

@@ -1,4 +1,6 @@
namespace Orchard.Settings {
using System;
namespace Orchard.Settings {
public class CurrentSiteWorkContext : IWorkContextStateProvider {
private readonly ISiteService _siteService;
@@ -6,10 +8,12 @@
_siteService = siteService;
}
public T Get<T>(string name) {
if (name == "CurrentSite")
return (T)_siteService.GetSiteSettings();
return default(T);
public Func<T> Get<T>(string name) {
if (name == "CurrentSite") {
var siteSettings = _siteService.GetSiteSettings();
return () => (T)siteSettings;
}
return null;
}
}
}

View File

@@ -1,4 +1,5 @@
using ClaySharp.Implementation;
using System;
using ClaySharp.Implementation;
using Orchard.DisplayManagement;
namespace Orchard.UI.Zones {
@@ -9,11 +10,12 @@ namespace Orchard.UI.Zones {
_shapeFactory = shapeFactory;
}
public T Get<T>(string name) {
public Func<T> Get<T>(string name) {
if (name == "Layout") {
return (dynamic)_shapeFactory.Create("Layout", Arguments.Empty());
var layout = _shapeFactory.Create("Layout", Arguments.Empty());
return () => (T)layout;
}
return default(T);
return null;
}
}
}