Get rid of IScopeProviderInternal

This commit is contained in:
Stephan
2017-05-30 19:41:37 +02:00
parent 2435449854
commit 1e62ea8b16
17 changed files with 1438 additions and 101 deletions
+1 -2
View File
@@ -228,8 +228,7 @@ namespace Umbraco.Core
container.RegisterSingleton<IDatabaseContext>(f => f.GetInstance<IUmbracoDatabaseFactory>());
// register the scope provider
container.RegisterSingleton<IScopeProviderInternal, ScopeProvider>();
container.RegisterSingleton<IScopeProvider>(f => f.GetInstance<IScopeProviderInternal>());
container.RegisterSingleton<IScopeProvider, ScopeProvider>();
// register MainDom
container.RegisterSingleton<MainDom>();
+5 -2
View File
@@ -19,7 +19,7 @@ namespace Umbraco.Core.Scoping
/// <param name="repositoryCacheMode">The repositories cache mode.</param>
/// <param name="eventDispatcher">An optional events dispatcher.</param>
/// <param name="scopeFileSystems">A value indicating whether to scope the filesystems.</param>
/// <param name="callContext">fixme what is this</param>
/// <param name="callContext">A value indicating whether this scope should always be registered in the call context.</param>
/// <returns>The created ambient scope.</returns>
/// <remarks>
/// <para>The created scope becomes the ambient scope.</para>
@@ -38,7 +38,10 @@ namespace Umbraco.Core.Scoping
/// Creates a detached scope.
/// </summary>
/// <returns>A detached scope.</returns>
/// fixme - params!
/// <param name="isolationLevel">The transaction isolation level.</param>
/// <param name="repositoryCacheMode">The repositories cache mode.</param>
/// <param name="eventDispatcher">An optional events dispatcher.</param>
/// <param name="scopeFileSystems">A value indicating whether to scope the filesystems.</param>
/// <remarks>
/// <para>A detached scope is not ambient and has no parent.</para>
/// <para>It is meant to be attached by <see cref="AttachScope"/>.</para>
@@ -1,28 +0,0 @@
namespace Umbraco.Core.Scoping
{
/// <summary>
/// Provides additional, internal scope provider functionnalities.
/// </summary>
/// <remarks>Extends <see cref="IScopeProvider"/> with internal features.</remarks>
internal interface IScopeProviderInternal : IScopeProvider // fixme - define what's internal and why
{
/// <summary>
/// Gets the ambient context.
/// </summary>
/// <remarks>May be null.</remarks>
ScopeContext AmbientContext { get; }
/// <summary>
/// Gets the ambient scope.
/// </summary>
/// <remarks>May be null.</remarks>
IScopeInternal AmbientScope { get; }
/// <summary>
/// Resets the ambient scope.
/// </summary>
/// <remarks>Resets the ambient scope (not completed anymore) and disposes the
/// entire scopes chain until there is no more scopes.</remarks>
void Reset();
}
}
+1 -1
View File
@@ -19,7 +19,7 @@ namespace Umbraco.Core.Scoping
/// <summary>
/// Implements <see cref="IScopeProvider"/>.
/// </summary>
internal class ScopeProvider : IScopeProviderInternal
internal class ScopeProvider : IScopeProvider
{
private readonly ILogger _logger;
private readonly FileSystems _fileSystems;
+2 -2
View File
@@ -8,9 +8,9 @@
/// chain).</remarks>
internal class ScopeReference : IDisposeOnRequestEnd // implies IDisposable
{
private readonly IScopeProviderInternal _scopeProvider;
private readonly ScopeProvider _scopeProvider;
public ScopeReference(IScopeProviderInternal scopeProvider)
public ScopeReference(ScopeProvider scopeProvider)
{
_scopeProvider = scopeProvider;
}
File diff suppressed because it is too large Load Diff
@@ -611,26 +611,6 @@ namespace Umbraco.Tests.IO
TestHelper.TryAssert(() => Assert.IsFalse(File.Exists(path + "/test/inner/f3.txt")));
}
[Test]
public void MockTest()
{
var scoped = false;
var provider = MockScopeProvider(() => scoped);
Assert.IsFalse(provider.AmbientScope.ScopedFileSystems);
scoped = true;
Assert.IsTrue(provider.AmbientScope.ScopedFileSystems);
}
private static IScopeProviderInternal MockScopeProvider(Func<bool> f)
{
var scopeMock = new Mock<IScopeInternal>();
scopeMock.Setup(x => x.ScopedFileSystems).Returns(f);
var providerMock = new Mock<IScopeProviderInternal>();
providerMock.Setup(x => x.AmbientScope).Returns(scopeMock.Object);
return providerMock.Object;
}
/// <summary>
/// Check that GetFiles will return all files on the shadow, while returning
/// just one on each of the filesystems used by the shadow.
@@ -127,7 +127,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void SingleShadowEvenDetached()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
using (var scope = scopeProvider.CreateScope(scopeFileSystems: true))
{
using (new SafeCallContext()) // not nesting!
+19 -19
View File
@@ -21,13 +21,13 @@ namespace Umbraco.Tests.Scoping
{
base.SetUp();
Assert.IsNull((ScopeProvider as IScopeProviderInternal).AmbientScope); // gone
Assert.IsNull(ScopeProvider.AmbientScope); // gone
}
[Test]
public void SimpleCreateScope()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
Assert.IsNull(scopeProvider.AmbientScope);
using (var scope = scopeProvider.CreateScope())
@@ -42,7 +42,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void SimpleCreateScopeContext()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
Assert.IsNull(scopeProvider.AmbientScope);
using (var scope = scopeProvider.CreateScope())
@@ -61,7 +61,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void SimpleCreateScopeDatabase()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
IUmbracoDatabase database;
@@ -82,7 +82,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedCreateScope()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
Assert.IsNull(scopeProvider.AmbientScope);
using (var scope = scopeProvider.CreateScope())
@@ -152,7 +152,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedCreateScopeContext()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
Assert.IsNull(scopeProvider.AmbientScope);
using (var scope = scopeProvider.CreateScope())
@@ -185,7 +185,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedCreateScopeInnerException()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
bool? scopeCompleted = null;
Assert.IsNull(scopeProvider.AmbientScope);
@@ -224,7 +224,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedCreateScopeDatabase()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
IUmbracoDatabase database;
@@ -254,7 +254,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void Transaction()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
using (var scope = scopeProvider.CreateScope())
{
@@ -291,7 +291,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedTransactionInnerFail()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
using (var scope = scopeProvider.CreateScope())
{
@@ -330,7 +330,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedTransactionOuterFail()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
using (var scope = scopeProvider.CreateScope())
{
@@ -368,7 +368,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void NestedTransactionComplete()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
using (var scope = scopeProvider.CreateScope())
{
@@ -407,7 +407,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void CallContextScope1()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
using (var scope = scopeProvider.CreateScope())
{
Assert.IsNotNull(scopeProvider.AmbientScope);
@@ -438,7 +438,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void CallContextScope2()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
Assert.IsNull(scopeProvider.AmbientScope);
var httpContextItems = new Hashtable();
@@ -486,7 +486,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void ScopeReference()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
var scope = scopeProvider.CreateScope();
var nested = scopeProvider.CreateScope();
Assert.IsNotNull(scopeProvider.AmbientScope);
@@ -507,7 +507,7 @@ namespace Umbraco.Tests.Scoping
[TestCase(false)]
public void ScopeContextEnlist(bool complete)
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
bool? completed = null;
IScope ambientScope = null;
@@ -537,7 +537,7 @@ namespace Umbraco.Tests.Scoping
[TestCase(false)]
public void ScopeContextEnlistAgain(bool complete)
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
bool? completed = null;
Exception exception = null;
@@ -574,7 +574,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void ScopeContextException()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
bool? completed = null;
@@ -615,7 +615,7 @@ namespace Umbraco.Tests.Scoping
[Test]
public void DetachableScope()
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
Assert.IsNull(scopeProvider.AmbientScope);
using (var scope = scopeProvider.CreateScope())
@@ -28,7 +28,7 @@ namespace Umbraco.Tests.Scoping
[TestCase(false)]
public void DefaultRepositoryCachePolicy(bool complete)
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
var service = Current.Services.UserService;
var globalCache = Current.ApplicationCache.IsolatedRuntimeCache.GetOrCreateCache(typeof(IUser));
@@ -103,7 +103,7 @@ namespace Umbraco.Tests.Scoping
[TestCase(false)]
public void FullDataSetRepositoryCachePolicy(bool complete)
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
var service = Current.Services.LocalizationService;
var globalCache = Current.ApplicationCache.IsolatedRuntimeCache.GetOrCreateCache(typeof (ILanguage));
@@ -195,7 +195,7 @@ namespace Umbraco.Tests.Scoping
[TestCase(false)]
public void SingleItemsOnlyRepositoryCachePolicy(bool complete)
{
var scopeProvider = ScopeProvider as IScopeProviderInternal;
var scopeProvider = ScopeProvider;
var service = Current.Services.LocalizationService;
var globalCache = Current.ApplicationCache.IsolatedRuntimeCache.GetOrCreateCache(typeof (IDictionaryItem));
+1 -1
View File
@@ -238,7 +238,7 @@ namespace Umbraco.Tests.Scoping
// Assert.AreEqual(beforeOuterXml, xml.OuterXml);
// }
// var scopeProvider = ScopeProvider as IScopeProviderInternal;
// var scopeProvider = ScopeProvider;
// Assert.IsNotNull(scopeProvider);
// // ambient scope may be null, or maybe not, depending on whether the code that
// // was called did proper scoped work, or some direct (NoScope) use of the database
@@ -54,15 +54,15 @@ namespace Umbraco.Tests.TestHelpers
protected CacheHelper DisabledCache => _disabledCacheHelper ?? (_disabledCacheHelper = CacheHelper.CreateDisabledCacheHelper());
protected IScopeUnitOfWorkProvider UowProvider => Core.Composing.Current.Container.GetInstance<IScopeUnitOfWorkProvider>();
protected IScopeUnitOfWorkProvider UowProvider => Current.Container.GetInstance<IScopeUnitOfWorkProvider>();
protected PublishedContentTypeCache ContentTypesCache { get; private set; }
protected override ISqlSyntaxProvider SqlSyntax => GetSyntaxProvider();
protected ServiceContext ServiceContext => Core.Composing.Current.Services;
protected ServiceContext ServiceContext => Current.Services;
protected IScopeProvider ScopeProvider => Core.Composing.Current.ScopeProvider;
internal ScopeProvider ScopeProvider => Current.ScopeProvider as ScopeProvider;
public override void SetUp()
{
@@ -239,18 +239,18 @@ namespace Umbraco.Tests.TestHelpers
var cache = new NullCacheProvider();
ContentTypesCache = new PublishedContentTypeCache(
Core.Composing.Current.Services.ContentTypeService,
Core.Composing.Current.Services.MediaTypeService,
Core.Composing.Current.Services.MemberTypeService,
Core.Composing.Current.Logger);
Current.Services.ContentTypeService,
Current.Services.MediaTypeService,
Current.Services.MemberTypeService,
Current.Logger);
// testing=true so XmlStore will not use the file nor the database
var facadeAccessor = new TestFacadeAccessor();
var service = new FacadeService(
Core.Composing.Current.Services,
(IScopeProviderInternal) Core.Composing.Current.ScopeProvider,
Current.Services,
(ScopeProvider) Current.ScopeProvider,
UowProvider,
cache, facadeAccessor, Core.Composing.Current.Logger, ContentTypesCache, null, true, Options.FacadeServiceRepositoryEvents);
cache, facadeAccessor, Current.Logger, ContentTypesCache, null, true, Options.FacadeServiceRepositoryEvents);
// initialize PublishedCacheService content with an Xml source
service.XmlStore.GetXmlDocument = () =>
@@ -421,7 +421,7 @@ namespace Umbraco.Tests.Web.Mvc
var cache = new NullCacheProvider();
//var provider = new ScopeUnitOfWorkProvider(databaseFactory, new RepositoryFactory(Mock.Of<IServiceContainer>()));
var scopeProvider = TestObjects.GetScopeProvider(Mock.Of<ILogger>()) as IScopeProviderInternal;
var scopeProvider = TestObjects.GetScopeProvider(Mock.Of<ILogger>());
var uowProvider = TestObjects.GetScopeUnitOfWorkProvider(Mock.Of<ILogger>(), scopeProvider: scopeProvider);
_service = new FacadeService(svcCtx, scopeProvider, uowProvider, cache, Enumerable.Empty<IUrlSegmentProvider>(), null, Current.Logger, null, true, false); // no events
@@ -35,7 +35,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
// used in WebBootManager + tests
public FacadeService(ServiceContext serviceContext,
IScopeProviderInternal scopeProvider,
IScopeProvider scopeProvider,
IScopeUnitOfWorkProvider uowProvider,
ICacheProvider requestCache,
IEnumerable<IUrlSegmentProvider> segmentProviders,
@@ -48,7 +48,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
// used in some tests
internal FacadeService(ServiceContext serviceContext,
IScopeProviderInternal scopeProvider,
IScopeProvider scopeProvider,
IScopeUnitOfWorkProvider uowProvider,
ICacheProvider requestCache,
IFacadeAccessor facadeAccessor,
@@ -59,8 +59,8 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
: this(serviceContext, scopeProvider, uowProvider, requestCache, Enumerable.Empty<IUrlSegmentProvider>(), facadeAccessor, logger, contentTypeCache, mainDom, testing, enableRepositoryEvents)
{ }
private FacadeService(ServiceContext serviceContext,
IScopeProviderInternal scopeProvider,
private FacadeService(ServiceContext serviceContext,
IScopeProvider scopeProvider,
IScopeUnitOfWorkProvider uowProvider,
ICacheProvider requestCache,
IEnumerable<IUrlSegmentProvider> segmentProviders,
@@ -28,7 +28,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_xml = IsWriter ? Clone(xml) : xml;
}
public static SafeXmlReaderWriter Get(IScopeProviderInternal scopeProvider, AsyncLock xmlLock, XmlDocument xml, Action<XmlDocument> refresh, Action<XmlDocument, bool> apply, bool writer)
public static SafeXmlReaderWriter Get(IScopeProvider scopeProvider, AsyncLock xmlLock, XmlDocument xml, Action<XmlDocument> refresh, Action<XmlDocument, bool> apply, bool writer)
{
var scopeContext = scopeProvider.Context;
@@ -21,7 +21,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
// register the XML facade service
composition.SetFacadeService(factory => new FacadeService(
factory.GetInstance<ServiceContext>(),
factory.GetInstance<IScopeProviderInternal>(),
(ScopeProvider) factory.GetInstance<IScopeProvider>(),
factory.GetInstance<IScopeUnitOfWorkProvider>(),
factory.GetInstance<CacheHelper>().RequestCache,
factory.GetInstance<UrlSegmentProviderCollection>(),
@@ -54,7 +54,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
private readonly RoutesCache _routesCache;
private readonly ServiceContext _serviceContext; // fixme WHY
private readonly IScopeUnitOfWorkProvider _uowProvider;
private readonly IScopeProviderInternal _scopeProvider;
private readonly IScopeProvider _scopeProvider;
#region Constructors
@@ -62,7 +62,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
/// Initializes a new instance of the <see cref="XmlStore"/> class.
/// </summary>
/// <remarks>The default constructor will boot the cache, load data from file or database, /// wire events in order to manage changes, etc.</remarks>
public XmlStore(ServiceContext serviceContext, IScopeProviderInternal scopeProvider, IScopeUnitOfWorkProvider uowProvider, RoutesCache routesCache, PublishedContentTypeCache contentTypeCache,
public XmlStore(ServiceContext serviceContext, IScopeProvider scopeProvider, IScopeUnitOfWorkProvider uowProvider, RoutesCache routesCache, PublishedContentTypeCache contentTypeCache,
IEnumerable<IUrlSegmentProvider> segmentProviders, IFacadeAccessor facadeAccessor, MainDom mainDom)
: this(serviceContext, scopeProvider, uowProvider, routesCache, contentTypeCache, segmentProviders, facadeAccessor, mainDom, false, false)
{ }
@@ -70,7 +70,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
// internal for unit tests
// no file nor db, no config check
// fixme - er, we DO have a DB?
internal XmlStore(ServiceContext serviceContext, IScopeProviderInternal scopeProvider, IScopeUnitOfWorkProvider uowProvider, RoutesCache routesCache, PublishedContentTypeCache contentTypeCache,
internal XmlStore(ServiceContext serviceContext, IScopeProvider scopeProvider, IScopeUnitOfWorkProvider uowProvider, RoutesCache routesCache, PublishedContentTypeCache contentTypeCache,
IEnumerable<IUrlSegmentProvider> segmentProviders, IFacadeAccessor facadeAccessor, MainDom mainDom,
bool testing, bool enableRepositoryEvents)
{