コード例 #1
0
ファイル: App.xaml.cs プロジェクト: lvovan/XOutput-reorder
        public App()
        {
            DependencyEmbedder dependencyEmbedder = new DependencyEmbedder();

            dependencyEmbedder.AddPackage("Newtonsoft.Json");
            dependencyEmbedder.AddPackage("SharpDX.DirectInput");
            dependencyEmbedder.AddPackage("SharpDX");
            dependencyEmbedder.AddPackage("Hardcodet.Wpf.TaskbarNotification");
            dependencyEmbedder.AddPackage("Nefarius.ViGEm.Client");
            dependencyEmbedder.Initialize();
            string exePath = Assembly.GetExecutingAssembly().Location;
            string cwd     = Path.GetDirectoryName(exePath);

            Directory.SetCurrentDirectory(cwd);

            ApplicationContext globalContext = ApplicationContext.Global;

            globalContext.Resolvers.Add(Resolver.CreateSingleton(Dispatcher));
            globalContext.AddFromConfiguration(typeof(ApplicationConfiguration));
            globalContext.AddFromConfiguration(typeof(UI.UIConfiguration));

            singleInstanceProvider = new SingleInstanceProvider();
            argumentParser         = globalContext.Resolve <ArgumentParser>();
#if !DEBUG
            Dispatcher.UnhandledException += async(object sender, DispatcherUnhandledExceptionEventArgs e) => await UnhandledException(e.Exception);
#endif
        }
コード例 #2
0
        /// <summary>
        /// Registriert ein Delegate zum Erzeugen einer einzelnen Dienstinstanz.
        /// </summary>
        /// <typeparam name="T">Typ des Dienstes.</typeparam>
        /// <param name="provider">Das Delegate, das Registriert werden soll.</param>
        /// <param name="addDefaultMultiProvider">
        /// Zusätzliches Delegate zum Erzeugen einer Liste von Instanzen
        /// hinzufügen oder nicht.
        /// </param>
        /// <returns>Diese Instanz.</returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="provider" /> ist eine <see langword="null" /> Referenz.
        /// </exception>
        /// <exception cref="DuplicateWaitObjectException">
        /// Ein Delegate wurde bereits registriert.
        /// </exception>
        public DelegateServiceLocatorWrapper RegisterSingle <T>(SingleInstanceProvider <T> provider,
                                                                bool addDefaultMultiProvider)
        {
            this.InvokeForFactoryLists(
                (singleList, multiList, args) =>
            {
                var factory = singleList.FirstOrDefault(f => args.ServiceType
                                                        .Equals(f.SERVICE_TYPE));
                if (factory != null)
                {
                    throw new DuplicateWaitObjectException(args.ServiceType
                                                           .FullName);
                }

                singleList.Add(new SingleInstanceFactory <T>(args.InstanceProvider));
            }, new
            {
                InstanceProvider = provider,
                ServiceType      = typeof(T),
            });

            if (addDefaultMultiProvider)
            {
                this.RegisterMulti <T>(SingleToMulti <T>(provider),
                                       false);
            }

            return(this);
        }
コード例 #3
0
        /// <summary>
        /// Registers a provider for resolving a single instance of a service.
        /// </summary>
        /// <typeparam name="T">Type of the service.</typeparam>
        /// <param name="provider">The provider to register.</param>
        /// <param name="registerDefaultMultiProvider">
        /// Also register a default multi instance provider or not.
        /// </param>
        /// <returns>That instance.</returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="provider" /> is <see langword="null" />.
        /// </exception>
        /// <exception cref="InvalidOperationException">
        /// A provider is already registrated for the service type.
        /// </exception>
        public DelegateServiceLocator RegisterSingleProvider <T>(SingleInstanceProvider <T> provider,
                                                                 bool registerDefaultMultiProvider)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }

            lock (this._SYNC)
            {
                Type serviceType = typeof(T);

                if (this._SINGLE_PROVIDERS.ContainsKey(serviceType))
                {
                    throw new InvalidOperationException();
                }

                this._SINGLE_PROVIDERS
                .Add(serviceType,
                     new InstanceProvider(serviceType, provider));
            }

            if (registerDefaultMultiProvider)
            {
                this.RegisterMultiProvider <T>(SingleToMulti <T>(provider),
                                               false);
            }

            return(this);
        }
コード例 #4
0
        private static MultiInstanceProvider <T> SingleToMulti <T>(SingleInstanceProvider <T> singleProvider)
        {
            if (singleProvider != null)
            {
                return(new MultiInstanceProvider <T>(
                           (sender) =>
                {
                    var instance = singleProvider(sender, null);
                    if (instance == null)
                    {
                        throw new ServiceActivationException(typeof(T),
                                                             null);
                    }

                    return new T[] { instance };
                }));
            }

            return(null);
        }
コード例 #5
0
ファイル: Injector.cs プロジェクト: oguzsan/Minic-DI-Source
        public IInstanceProvider AddValueProvider(Type bindingType, object value)
        {
            Type providerType = value.GetType();

            //  Check if type of value is assignable to target type
            if (!bindingType.IsAssignableFrom(providerType))
            {
                //  Handler error
                InjectionError error = CreateError(InjectionErrorType.ValueNotAssignableToBindingType, bindingType, providerType, 2);
                if (_ShouldThrowException)
                {
                    throw new InjectionException(error.Error, error.Message);
                }

                return(null);
            }

            //  Check if a provider with given type exist
            IInstanceProvider provider;

            if (_Providers.TryGetValue(providerType, out provider))
            {
                //  Check if existing provider is same with requested one
                if (provider.GetType() != typeof(SingleInstanceProvider))
                {
                    //  Handler error
                    InjectionError error = CreateError(InjectionErrorType.AlreadyAddedTypeWithDifferentProvider, bindingType, providerType, 2);
                    if (_ShouldThrowException)
                    {
                        throw new InjectionException(error.Error, error.Message);
                    }
                }
            }
            else
            {
                provider = new SingleInstanceProvider(value);
                _Providers.Add(providerType, provider);
            }

            return(provider);
        }
コード例 #6
0
        private static MultiInstanceProvider <T> SingleToMulti <T>(SingleInstanceProvider <T> provider)
        {
            return(new MultiInstanceProvider <T>(delegate(DelegateServiceLocator locator, object key)
            {
                try
                {
                    T instance = provider(locator, key);
                    if (instance != null)
                    {
                        return new T[] { instance };
                    }
                }
                catch (ServiceActivationException saex)
                {
                    if (saex.InnerException != null)
                    {
                        throw;
                    }
                }

                return CollectionHelper.Empty <T>();
            }));
        }
コード例 #7
0
        private static MultiInstanceProvider <T> SingleToMulti <T>(SingleInstanceProvider <T> provider)
        {
            return((locator, key) =>
            {
                try
                {
                    var instance = provider(locator, key);
                    if (instance != null)
                    {
                        return new T[] { instance };
                    }
                }
                catch (ServiceActivationException saex)
                {
                    if (saex.InnerException != null)
                    {
                        throw;
                    }
                }

                return Enumerable.Empty <T>();
            });
        }
コード例 #8
0
 /// <summary>
 /// Registriert ein Delegate zum Erzeugen einer einzelnen Dienstinstanz
 /// und fügt zusätzlich ein Standard-Delegate zum Erzeugen einer Liste von Instanzen
 /// hinzu.
 /// </summary>
 /// <typeparam name="T">Typ des Dienstes.</typeparam>
 /// <param name="provider">Das Delegate, das Registriert werden soll.</param>
 /// <returns>Diese Instanz.</returns>
 /// <exception cref="ArgumentNullException">
 /// <paramref name="provider" /> ist eine <see langword="null" /> Referenz.
 /// </exception>
 /// <exception cref="DuplicateWaitObjectException">
 /// Ein Delegate wurde bereits registriert.
 /// </exception>
 public DelegateServiceLocatorWrapper RegisterSingle <T>(SingleInstanceProvider <T> provider)
 {
     return(this.RegisterSingle <T>(provider,
                                    true));
 }
コード例 #9
0
 internal SingleInstanceFactory(SingleInstanceProvider <T> provider)
     : base(typeof(T),
            provider)
 {
 }