コード例 #1
0
        public IAdorneredTooltipsManager Create(AdornerLayer adornerLayer)
        {
            Argument.IsNotNull(() => adornerLayer);

            var hintsAdornerLayer        = _serviceLocator.ResolveTypeUsingParameters <IAdornerLayer>(new object[] { adornerLayer });
            var adorneredHintFactory     = _serviceLocator.ResolveType <IAdorneredTooltipFactory>();
            var adorneredHintsCollection = _serviceLocator.ResolveTypeUsingParameters <IAdorneredTooltipFactory>(new object[] { adorneredHintFactory });

            var adornerGenerator = _serviceLocator.ResolveType <IAdornerTooltipGenerator>();
            var hintsProvider    = _serviceLocator.ResolveType <IHintsProvider>();

            return(_typeFactory.CreateInstanceWithParameters <AdorneredTooltipsManager>(adornerGenerator, hintsProvider, hintsAdornerLayer, adorneredHintsCollection));
        }
コード例 #2
0
        /// <summary>
        /// Gets the repository that is created specificially for this unit of work.
        /// <para />
        /// Note that the following conditions must be met: <br />
        /// <list type="number">
        /// <item>
        /// <description>
        /// The container must be registered in the <see cref="ServiceLocator" /> as <see cref="RegistrationType.Transient" /> type. If the
        /// repository is declared as non-transient, it will be instantiated as new instance anyway.
        /// </description>
        /// </item>
        /// <item>
        /// <description>
        /// The repository must have a constructor accepting a <see cref="DbContext" /> instance.
        /// </description>
        /// </item>
        /// </list>
        /// </summary>
        /// <typeparam name="TEntityRepository">The type of the entity repository.</typeparam>
        /// <returns>The entity repository.</returns>
        /// <exception cref="NotSupportedException">The specified repository type cannot be found.</exception>
        public virtual TEntityRepository GetRepository <TEntityRepository>()
            where TEntityRepository : IEntityRepository
        {
            var registrationInfo = _serviceLocator.GetRegistrationInfo(typeof(TEntityRepository));

            if (registrationInfo == null)
            {
                throw Log.ErrorAndCreateException <NotSupportedException>("The specified repository type '{0}' cannot be found. Make sure it is registered in the ServiceLocator.", typeof(TEntityRepository).FullName);
            }

            var repository = _typeFactory.CreateInstanceWithParameters(registrationInfo.ImplementingType, DbContext);

            return((TEntityRepository)repository);
        }
コード例 #3
0
        /// <summary>
        /// Registers the convention.
        /// </summary>
        public void RegisterConvention <TRegistrationConvention>(RegistrationType registrationType = RegistrationType.Singleton)
            where TRegistrationConvention : IRegistrationConvention
        {
            var registrationConvention = _typeFactory.CreateInstanceWithParameters <TRegistrationConvention>(_serviceLocator, registrationType);

            if (_registeredConventions.Contains(registrationConvention))
            {
                return;
            }

            Log.Debug("Registering '{0}' on cached conventions", typeof(TRegistrationConvention).Name);

            _registeredConventions.Add(registrationConvention);

            ApplyConventions();
        }
コード例 #4
0
        protected override async Task InitializeAsync()
        {
            try
            {
                if (IsActive && _initialSearchParams is not null)
                {
                    // Set page initial search params as Settings parameters
                    // Only on first loaded page
                    Settings.IsPreReleaseIncluded = _initialSearchParams.IsPrereleaseIncluded;
                    Settings.SearchString         = _initialSearchParams.SearchString;
                    Settings.IsRecommendedOnly    = _initialSearchParams.IsRecommendedOnly;
                }

                // Execution delay
                SingleDelayTimer.Elapsed  += OnTimerElapsed;
                SingleDelayTimer.AutoReset = false;

                SingleDelayTimer.SynchronizingObject = _typeFactory.CreateInstanceWithParameters <ISynchronizeInvoke>(
                    _dispatcherProviderService.GetCurrentDispatcher());

                PackageItems = new FastObservableCollection <NuGetPackage>();

                PackageItems.CollectionChanged += OnPackageItemsCollectionChanged;

                _packageOperationContextService.OperationContextDisposing += OnOperationContextDisposing;

                IsFirstLoaded = false;
                var pageSize = _nuGetConfigurationService.GetPackageQuerySize();

                if (Settings.ObservedFeed is not null && !string.IsNullOrEmpty(Settings.ObservedFeed.Source))
                {
                    var currentFeed = Settings.ObservedFeed;
                    PageInfo = new PageContinuation(pageSize, Settings.ObservedFeed.GetPackageSource());

                    var searchParams = new PackageSearchParameters(Settings.IsPreReleaseIncluded, Settings.SearchString, Settings.IsRecommendedOnly);

                    await VerifySourceAndLoadPackagesAsync(PageInfo, currentFeed, searchParams, pageSize);
                }
                else
                {
                    Log.Info("None of the source feeds configured");
                }
            }
コード例 #5
0
ファイル: ViewModelFactory.cs プロジェクト: ziez/Catel
        /// <summary>
        /// Creates a new view model.
        /// </summary>
        /// <param name="viewModelType">Type of the view model that needs to be created.</param>
        /// <param name="dataContext">The data context of the view model.</param>
        /// <returns>The newly created <see cref="IViewModel"/> or <c>null</c> if no view model could be created.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="viewModelType"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentException">The <paramref name="viewModelType"/> does not implement the <see cref="IViewModel"/> interface.</exception>
        public virtual IViewModel CreateViewModel(Type viewModelType, object dataContext)
        {
            Argument.IsNotNull("viewModelType", viewModelType);
            Argument.ImplementsInterface("viewModelType", viewModelType, typeof(IViewModel));

            IViewModel viewModel = null;

            // Only try to construct the view model when the injection object is not null, otherwise every
            // view model can be constructed with a nullable object. If a user wants a view model to be constructed
            // without any datacontext or injection, he/she should use an empty default constructor which will only
            // be used when injection is not possible
            if (dataContext != null)
            {
                viewModel = _typeFactory.CreateInstanceWithParameters(viewModelType, dataContext) as IViewModel;
                if (viewModel != null)
                {
                    Log.Debug("Constructed view model '{0}' using injection of data context '{1}'", viewModelType.FullName, ObjectToStringHelper.ToTypeString(dataContext));
                    return(viewModel);
                }
            }

            // Try to construct view model using dependency injection
            viewModel = _typeFactory.CreateInstance(viewModelType) as IViewModel;
            if (viewModel != null)
            {
                Log.Debug("Constructed view model '{0}' using dependency injection or empty constructor", viewModelType.FullName);
                return(viewModel);
            }

            // Last resort: Activator
            viewModel = _typeFactory.CreateInstanceUsingActivator(viewModelType) as IViewModel;
            if (viewModel != null)
            {
                Log.Debug("Constructed view model '{0}' using Activator.CreateInstance", viewModelType.FullName);
            }
            else
            {
                Log.Debug("Could not construct view model '{0}' using injection of data context '{1}' or Activator.CreateInstance",
                          viewModelType.FullName, ObjectToStringHelper.ToTypeString(dataContext));
            }

            return(viewModel);
        }
コード例 #6
0
ファイル: ProxyFactory.cs プロジェクト: wqhenry/Catel
        /// <summary>
        /// Creates a proxy instance of the specified proxy type using the specified constructor arguments.
        /// </summary>
        /// <typeparam name="TProxy">The type of the proxy.</typeparam>
        /// <param name="parameters">The parameters.</param>
        /// <param name="interceptor">The interceptor.</param>
        /// <param name="interfaces">The interfaces.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">The <paramref name="parameters"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="interceptor"/> is <c>null</c>.</exception>
        public TProxy Create <TProxy>(object[] parameters, IInterceptor interceptor, params Type[] interfaces)
            where TProxy : class
        {
            Argument.IsNotNullOrEmptyArray("parameters", parameters);
            Argument.IsNotNull(() => interceptor);

            var proxyType = typeof(TProxy);

            var proxy = (TProxy)_typeFactory.CreateInstanceWithParameters(proxyType, parameters);
            var interceptorAdapter = new InterceptorAdapter(interceptor, proxy);

            return
                ((TProxy)
                 _proxyGenerator.CreateClassProxy(proxyType, interfaces, ProxyGenerationOptions.Default,
                                                  parameters,
                                                  new Castle.DynamicProxy.IInterceptor[]
            {
                interceptorAdapter
            }));
        }
コード例 #7
0
        /// <summary>
        /// Creates an instance of the specified type using the specified parameters as injection values.
        /// </summary>
        /// <typeparam name="T">The type to instantiate.</typeparam>
        /// <param name="typeFactory">The type factory.</param>
        /// <param name="parameters">The parameters to inject.</param>
        /// <returns>The instantiated type using dependency injection.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="typeFactory"/> is <c>null</c>.</exception>
        public static T CreateInstanceWithParameters <T>(this ITypeFactory typeFactory, params object[] parameters)
        {
            Argument.IsNotNull("typeFactory", typeFactory);

            return((T)typeFactory.CreateInstanceWithParameters(typeof(T), parameters));
        }