Ejemplo n.º 1
0
        /// <summary>
        /// Creates the <see cref="IDisposable"/> for object's closing.
        /// </summary>
        /// <param name="resolved">The object resolved via the URI.</param>
        /// <param name="uriResolvedObjectHolder">The holder of objects via an URI.</param>
        /// <param name="uriDisconnectTable">The table for disonnectiong objects from the user interface.</param>
        /// <returns><see cref="IDisposable"/> for object's closing.</returns>
        private static IDisposable CreateCloseDisposable(
            object resolved,
            IUriResolvedObjectHolder uriResolvedObjectHolder,
            IUriDisconnectTable uriDisconnectTable)
        {
            return(Disposable.Create(() =>
            {
                try
                {
                    uriDisconnectTable[resolved].Disconnect(resolved);

                    var disposableResolved = resolved as IDisposable;
                    if (disposableResolved != null)
                    {
                        disposableResolved.Dispose();
                    }

                    uriDisconnectTable.Remove(resolved);
                    uriResolvedObjectHolder.Remove(resolved);
                }
                catch (Exception ex)
                {
                    if (ex.IsCritical())
                    {
                        throw;
                    }

                    Trace.TraceError(ex.ToString());
                }
            }));
        }
Ejemplo n.º 2
0
        public void Initialize()
        {
            if (Settings.Instance == null)
            {
                Settings.Initialize(b => { b.Scheme = "tst"; });
            }

            this._uriResolvedObjectHolder    = Substitute.For <IUriResolvedObjectHolder>();
            this._uriResolutionCustomization = Substitute.For <IUriResolutionCustomization>();
            this._uriModuleItemResolver      = Substitute.For <IUriModuleItemResolver>();
            this._resolveSetupFactory        = Substitute.For <IResolveSetupFactory>();
            this._traceListener      = Substitute.For <TraceListener>();
            this._uriDisconnectTable = Substitute.For <IUriDisconnectTable>();

            IUriModuleItemResolver uriModuleResolverStub;
            var uriModuleResolverIndex = Substitute.For <IIndex <UriModuleItemResolverKey, IUriModuleItemResolver> >();

            uriModuleResolverIndex
            .TryGetValue(new UriModuleItemResolverKey("module", "item"), out uriModuleResolverStub)
            .Returns(
                x =>
            {
                x[1] = this._uriModuleItemResolver;
                return(true);
            });

            var anyPlacementResolver = Substitute.For <IUriPlacementResolver>();

            anyPlacementResolver.Resolve(null, null, null).ReturnsForAnyArgs(Substitute.For <IUriPlacementConnector>());

            this._uriResolutionCustomization.ModuleItemResolvers.Returns(uriModuleResolverIndex);
            this._uriResolutionCustomization.PlacementResolvers.Returns(Enumerable.Repeat(anyPlacementResolver, 1));

            Trace.Listeners.Add(this._traceListener);
        }
Ejemplo n.º 3
0
        public void Initialize()
        {
            if (Settings.Instance == null)
            {
                Settings.Initialize(b => { b.Scheme = "tst"; });
            }

            this._uriResolvedObjectHolder = Substitute.For <IUriResolvedObjectHolder>();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the class <see cref="Shell"/>.
        /// </summary>
        /// <param name="uriResolvedObjectHolder">The holder for objects opened by the shell via a URI.</param>
        /// <param name="shellResolveFactory">The factory of an object responsible for URI's resolution beginning.</param>
        public Shell(
            IUriResolvedObjectHolder uriResolvedObjectHolder,
            ShellResolveFactory shellResolveFactory)
        {
            Contract.Requires <ArgumentNullException>(shellResolveFactory != null);
            Contract.Requires <ArgumentNullException>(uriResolvedObjectHolder != null);

            // If user hasn't specified settings, initialize with defaults.
            if (Settings.Instance == null)
            {
                Settings.Initialize(b => { });
            }

            this._shellResolveFactory     = shellResolveFactory;
            this._uriResolvedObjectHolder = uriResolvedObjectHolder;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the class <see cref="ResolveOpen"/>.
        /// </summary>
        /// <param name="uri">URI to be resolved.</param>
        /// <param name="attachments">The list of attached to an URI objects with identifiers..</param>
        /// <param name="resolveSetupFactory">The factory of a service for setup of objects resolved via an URI.</param>
        /// <param name="uriResolvedObjectHolder">The holder of objects resolved via an URI.</param>
        /// <param name="uriDisconnectTable">The table for disconnecting objects from an user interface.</param>
        /// <param name="uriResolutionCustomization">The object that provides custom components of the URI resolution process.</param>
        public ResolveOpen(
            Uri uri,
            object[] attachments,
            IResolveSetupFactory resolveSetupFactory,
            IUriResolvedObjectHolder uriResolvedObjectHolder,
            IUriDisconnectTable uriDisconnectTable,
            IUriResolutionCustomization uriResolutionCustomization)
        {
            Contract.Requires <ArgumentNullException>(uri != null);
            Contract.Requires <ArgumentNullException>(attachments != null);
            Contract.Requires <ArgumentNullException>(resolveSetupFactory != null);
            Contract.Requires <ArgumentNullException>(uriResolvedObjectHolder != null);
            Contract.Requires <ArgumentNullException>(uriDisconnectTable != null);
            Contract.Requires <ArgumentNullException>(uriResolutionCustomization != null);

            this._unresolvedUri              = uri;
            this._attachments                = attachments;
            this._resolveSetupFactory        = resolveSetupFactory;
            this._uriResolvedObjectHolder    = uriResolvedObjectHolder;
            this._uriResolutionCustomization = uriResolutionCustomization;
            this._uriDisconnectTable         = uriDisconnectTable;
        }