コード例 #1
0
    protected override object CreateNewRegionItem(string candidateTargetContract)
    {
        object instance;

        try
        {
            var uri = _uri as NavigationUri;
            if (uri == null)
            {
                instance = _serviceLocator.GetInstance <object>(candidateTargetContract);
            }
            else
            {
                // Create injection overrides for all the types in the uri
                var depoverride = new DependencyOverrides();
                foreach (var supplant in uri)
                {
                    depoverride.Add(supplant.Key, supplant.Value);
                }
                instance = _unityContainer.Resolve <object>(candidateTargetContract, depoverride);
            }
        }
        catch (ActivationException exception)
        {
            throw new InvalidOperationException(string.Format(System.Globalization.CultureInfo.CurrentCulture, "CannotCreateNavigationTarget", new object[] { candidateTargetContract }), exception);
        }
        return(instance);
    }
        public IAggregateService CreateRepository(Type aggregateRepositoryType)
        {
            if (!aggregateRepositoryType.IsAggregateRepository())
            {
                throw new ArgumentException("Type specified as aggregate repository have to implement interace " + Indicators.Aggregates.Repository);
            }

            if (aggregateRepositoryType.GetTypeInfo().IsInterface)
            {
                throw new InvalidOperationException("Can't create aggregate repository by interface " + aggregateRepositoryType +
                                                    ". Factory must be used for concrete types only. Try check and use mapping interface2concrete");
            }

            var readDomainContextProviderProxy = new ReadableDomainContextProviderProxy(_scopedDomainContextsStore, _domainContextHost);
            var modifiableDomainContextProviderProxy = new ModifiableDomainContextProviderProxy(_scopedDomainContextsStore, _domainContextHost);

            var dependencyOverrides = new DependencyOverrides
                {
                    // указываем какие экземпляры использовать при resolve нижеуказанных зависимостей
                    // данные типы зависимостей даже не должны регистророваться в DI-контейнере, т.е. resolve
                    // работает ТОЛЬКО из-за того, что мы явно указываем какие экземпляры для каких типов зависимостей нужно использовать
                    { typeof(IReadableDomainContextProvider), readDomainContextProviderProxy },
                    { typeof(IModifiableDomainContextProvider), modifiableDomainContextProviderProxy }
                };

            return (IAggregateService)_unityContainer.Resolve(aggregateRepositoryType, Mapping.ExplicitlyCreatedAggregateRepositoriesScope, dependencyOverrides);
        }
コード例 #3
0
		private Channel CreateChannelConnection(string channelName)
		{
			var connection = GetIrcConnection(channelName);
			var overrides = new DependencyOverrides();
			overrides.Add(typeof(TwitchConnector), this);
			overrides.Add(typeof(IrcConnection), connection);
			return DependencyInjector.Resolve<Channel>(overrides, new ParameterOverride("channelName", channelName));//TODO: Encapsulate parameters
		}
コード例 #4
0
        public ResolveContext Create(DependencyInjectionContainer container, DependencyOverrides dependencyOverrides = null)
        {
            if (_perThreadResolveContext.IsValueCreated == false)
            {
                return(_perThreadResolveContext.Value = new ResolveContext(container, dependencyOverrides));
            }

            return(_perThreadResolveContext.Value.ChangeInitialContext(container, dependencyOverrides));
        }
コード例 #5
0
		private Plugin CreatePluginFromAssembly(Assembly assembly)
		{
			PluginAttribute attr = assembly.GetCustomAttribute<PluginAttribute>();
			if (attr == null)
			{
				throw new ArgumentException($"Assembly '{assembly.FullName}' doesn't have a PluginAssemblyAttribute", "assembly");
			}
			DependencyContainer.RegisterType(attr.PluginClass, new ContainerControlledLifetimeManager());
			var overrides = new DependencyOverrides();
			overrides.Add(typeof(PluginManager), Manager);
			return (Plugin)DependencyContainer.Resolve(attr.PluginClass, overrides);
		}
        public IAggregateReadModel CreateAggregateReadModel(Type aggregateReadModelType)
        {
            if (!aggregateReadModelType.IsAggregateReadModel())
            {
                throw new ArgumentException("Type specified as aggregate read model have to implement interace " + Indicators.Aggregates.ReadModel);
            }

            var readableDomainContextProvider = new ReadableDomainContextProvider(_scopedDomainContextsStore, _domainContextScope);

            var dependencyOverrides = new DependencyOverrides
                {
                    // указываем какие экземпляры использовать при resolve нижеуказанных зависимостей
                    // данные типы зависимостей даже не должны регистророваться в DI-контейнере, т.е. resolve
                    // работает ТОЛЬКО из-за того, что мы явно указываем какие экземпляры для каких типов зависимостей нужно использовать
                    { typeof(IReadableDomainContextProvider), readableDomainContextProvider },
                };

            return (IAggregateReadModel)_unityContainer.Resolve(aggregateReadModelType, Mapping.ExplicitlyCreatedAggregateServicesScope, dependencyOverrides);
        }
コード例 #7
0
		private WhisperConnection CreateWhisperConnection()
		{
			var connectionInfo = Api.GetWhisperServers().First();
			var connection = CreateIrcConnection(connectionInfo);
			var overrides = new DependencyOverrides();
			overrides.Add(typeof(TwitchConnector), this);
			overrides.Add(typeof(IrcConnection), connection);
			return DependencyInjector.Resolve<WhisperConnection>(overrides);
		}
コード例 #8
0
 public ResolveContext Create(DependencyInjectionContainer container, DependencyOverrides dependencyOverrides = null)
 {
     return(new ResolveContext(container, dependencyOverrides));
 }