예제 #1
0
            public override void PreBuildUp(IBuilderContext context)
            {
                var key = context.OriginalBuildKey;

                if (!key.Type.IsInterface || context.GetOverriddenResolver(key.Type) != null)
                {
                    return;
                }

                Stack <Type> stack;

                if (!_stackDictionary.TryGetValue(key.Type, out stack))
                {
                    return;
                }

                object value = null;

                foreach (var t in stack)
                {
                    value = context.NewBuildUp(new NamedTypeBuildKey(t, key.Name));
                    var overrides = new DependencyOverride(key.Type, value);
                    context.AddResolverOverrides(overrides);
                }

                context.Existing      = value;
                context.BuildComplete = true;
            }
예제 #2
0
        public override void PreBuildUp(IBuilderContext context)
        {
            NamedTypeBuildKey key = context.OriginalBuildKey;

            if (!(key.Type.IsInterface && _typeStacks.ContainsKey(key.Type)))
            {
                return;
            }

            if (null != context.GetOverriddenResolver(key.Type))
            {
                return;
            }

            var    stack = new Stack <Type>(_typeStacks[key.Type]);
            object value = null;

            stack.ForEach(type =>
            {
                value         = context.NewBuildUp(new NamedTypeBuildKey(type, key.Name));
                var overrides = new DependencyOverride(key.Type, value);
                context.AddResolverOverrides(overrides);
            }
                          );

            context.Existing      = value;
            context.BuildComplete = true;
        }
        public override void PreBuildUp(IBuilderContext context)
        {
            var key = context.OriginalBuildKey;

            if (!(key.Type.IsInterface &&
                  _typeStacks.ContainsKey(key.Type)) ||
                context.GetOverriddenResolver(key.Type) != null)
            {
                return;
            }


            var stack = _typeStacks[key.Type];

            object value = null;

            while (stack.Count != 0)
            {
                var t = stack.Dequeue();
                value = context.NewBuildUp(t, key.Name);
                var overrides = new DependencyOverride(
                    key.Type, value);
                context.AddResolverOverrides(overrides);
            }

            context.Existing      = value;
            context.BuildComplete = true;
        }
예제 #4
0
 public async Task StartActivityAsync(Type activityInfoType, ActivityInfo activityInfo)
 {
     var activityType         = GetActivityType(activityInfoType);
     var activityInfoOverride = new DependencyOverride(activityInfoType, new InjectionParameter(activityInfo));
     var activity             = (IActivity)container.Resolve(activityType, activityInfoOverride);
     await activity.StartAsync();
 }
예제 #5
0
        private DependencyOverride ResolveValueObjectFindSpecificationProvider(IValueObjectMetadata metadata)
        {
            var metadatOverride = new DependencyOverride(metadata.GetType(), metadata);

            return(new DependencyOverride(
                       typeof(IFindSpecificationProvider <,>).MakeGenericType(metadata.ValueObjectType, typeof(AggregateOperation)),
                       _unityContainer.Resolve(typeof(ValueObjectFindSpecificationProvider <,>).MakeGenericType(metadata.ValueObjectType, metadata.EntityKeyType), metadatOverride)));
        }
예제 #6
0
        public IFactDependencyProcessor Create(IFactDependencyFeature metadata)
        {
            var processorType      = typeof(FactDependencyProcessor <>).MakeGenericType(metadata.DependancyType);
            var metadataDependency = new DependencyOverride(typeof(IFactDependencyFeature <>).MakeGenericType(metadata.DependancyType), metadata);
            var processor          = _unityContainer.Resolve(processorType, metadataDependency);

            return((IFactDependencyProcessor)processor);
        }
        private DependencyOverride ResolveAggregateFindSpecificationProvider(IMetadataElement metadata)
        {
            var aggregateType    = metadata.GetType().GenericTypeArguments[0];
            var aggregateKeyType = metadata.GetType().GenericTypeArguments[1];
            var metadataOverride = new DependencyOverride(metadata.GetType(), metadata);

            return(new DependencyOverride(
                       typeof(IFindSpecificationProvider <,>).MakeGenericType(aggregateType, typeof(AggregateOperation)),
                       _unityContainer.Resolve(typeof(AggregateFindSpecificationProvider <,>).MakeGenericType(aggregateType, aggregateKeyType), metadataOverride)));
        }
        public T Resolve <T>(ContainerDependencyOverride dependencyOverride)
        {
            if (dependencyOverride == null)
            {
                throw new ArgumentNullException(nameof(dependencyOverride));
            }
            var overrider = new DependencyOverride(dependencyOverride.Type, dependencyOverride.Instance);

            return(_container.Resolve <T>(overrider));
        }
예제 #9
0
        /// <summary>
        /// Gets an instance of the requested repository type
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        protected T GetRepository <T>() where T : IRepository
        {
            IRepository repository = dependencyResolver.Resolve <T>(
                DependencyOverride.CreateNew <DbContext>(dbContext),
                DependencyOverride.CreateNew <IDataMapper>(DataMapper));

            ((IDataInteractions)repository).OnDataChange += OnDataChangeHandler;

            return((T)repository);
        }
예제 #10
0
        public AccountManager(
            IAccountContext accountContext, ICryptoProvider cryptoProvider,
            ISystemContext systemContext, IDependencyResolver dependencyResolver)
        {
            this.accountContext     = accountContext;
            this.cryptoProvider     = cryptoProvider;
            this.systemContext      = systemContext;
            this.dependencyResolver = dependencyResolver;

            //This resolved instance is delayed until here because we want to make sure the user validator also uses the same DB Access instances
            this.userValidator = dependencyResolver.Resolve <IUserValidator>(DependencyOverride.CreateNew <IUsersRepository>(accountContext.Users));
        }
예제 #11
0
        public void DirectUseOfDependencyOverride()
        {
            // arrange
            var target             = new Composition.CompositionRoot();
            var resolvedParameter  = new ResolvedParameter <IDrillBit>(CompositionRoot.SecondDrill);
            var dependencyOverride = new DependencyOverride <IDrillBit>(resolvedParameter);

            // act
            var actual = target.Container.Resolve <ILayer>(dependencyOverride);

            // assert
            Assert.IsNotNull(actual);
        }
        public T Resolve <T>(params InjectedParam[] args)
        {
            List <ResolverOverride> overrides = new List <ResolverOverride>();

            foreach (var arg in args)
            {
                var typeToConstruct    = arg.TypeOfParam;
                var dependencyOverride = new DependencyOverride(typeToConstruct, arg.Value);
                overrides.Add(dependencyOverride);
            }

            return(_container.Resolve <T>(overrides.ToArray()));
        }
예제 #13
0
        public void ShouldResolveAlternativeImplementationWhenUsingOverride()
        {
            // arrange
            var target             = new Composition.CompositionRoot();
            var resolvedParameter  = new ResolvedParameter <IMessageProvider>(nameof(AlternativeMessageProvider));
            var dependencyOverride = new DependencyOverride <IMessageProvider>(resolvedParameter);

            // act
            var actual = target.Container.Resolve <IController>(dependencyOverride);

            // assert
            Assert.AreEqual(actual.GetMessage(), "Goodbye cruel world!");
        }
        /// <summary>
        /// Registers types into the Unity container.
        /// </summary>
        /// <param name="types">The array of interfaces and concretes to map up and register.</param>
        /// <param name="behaviors">The behaviors to use to guide auto-mapping.</param>
        public IEnumerable <ContainerRegistration> RegisterTypes(MappingBehaviors behaviors, params Type[] types)
        {
            var configurationDetails = GetConfigurationDetails(types);
            var mappings             = mappingFactory.CreateMappings(behaviors, configurationDetails, types);

            var configParameter    = new DependencyOverride <AutomapperConfig>(configurationDetails);
            var mappingParameter   = new DependencyOverride <IEnumerable <TypeMapping> >(mappings);
            var behaviorParameter  = new DependencyOverride <MappingBehaviors>(behaviors);
            var containerParameter = new DependencyOverride <IUnityContainer>(target);

            var mappingHandler = internalContainer.Resolve <ITypeMappingHandler>(configParameter, mappingParameter, behaviorParameter, containerParameter);

            return(mappingHandler.PerformRegistrations(target, mappings));
        }
        public void DependencyOverrideValueInConfigFile()
        {
            IToWhichDependent overrideDependency = new Type2ToWhichDependent(9999);
            DependencyOverride <IToWhichDependent> overrideParam = new DependencyOverride <IToWhichDependent>(overrideDependency);

            IUnityContainer container = GetContainer("DependencyOverrideContainer");

            var result = container.Resolve <Type3DependingOnOtherType>("TestDependencyOverrideDefaultInConfiguration", overrideParam);

            Assert.IsInstanceOfType(result.IToWhichDependent, typeof(Type2ToWhichDependent));
            Assert.IsInstanceOfType(result.OneMoreIToWhichDependent, typeof(Type2ToWhichDependent));
            Assert.AreEqual <int>(9999, result.OneMoreIToWhichDependent.X);
            Assert.AreEqual <int>(9999, result.IToWhichDependent.X);
        }
        public IFactDependencyProcessor Create(IFactDependencyFeature metadata)
        {
            Type processorType;

            if (!KnownFeatureProcessors.TryGetValue(metadata.GetType().GetGenericTypeDefinition(), out processorType))
            {
                throw new ArgumentException($"Feature of type {metadata.GetType().Name} has no known processor", nameof(metadata));
            }

            processorType = processorType.MakeGenericType(metadata.GetType().GetGenericArguments());
            var metadataOverride = new DependencyOverride(metadata.GetType(), metadata);
            var processor        = _unityContainer.Resolve(processorType, metadataOverride);

            return((IFactDependencyProcessor)processor);
        }
예제 #17
0
        public void DependencyLegacy()
        {
            // arrange
            Container.RegisterType <IController, TheController>()
            .RegisterType <IMessageProvider, DefaultMessageProvider>()
            .RegisterType <IMessageProvider, AlternativeMessageProvider>(nameof(AlternativeMessageProvider));

            var resolvedParameter  = new ResolvedParameter <IMessageProvider>(nameof(AlternativeMessageProvider));
            var dependencyOverride = new DependencyOverride <IMessageProvider>(resolvedParameter);

            // act
            var actual = Container.Resolve <IController>(dependencyOverride);

            // assert
            Assert.AreEqual(actual.GetMessage(), "Goodbye cruel world!");
        }
    public Consumer(string runtimeChoice)
    {
        DependencyOverride <IDatabase> dependency = null;

        if (runtimeChoice == "SQLSERVER")
        {
            dependency = new DependencyOverride <IDatabase>
                             (Container.Resolve <IDatabase>("SQLDatabase"));
        }
        else if (runtimeChoice == "Oracle")
        {
            dependency = new DependencyOverride <IDatabase>
                             (Container.Resolve <IDatabase>("OracleDatabase"));
        }
        dataService = _container.Resolve <IDataService>(dependency);
    }
예제 #19
0
        public override void PreBuildUp(ref BuilderContext context)
        {
            // Get the type that is to be constructed
            var typeToBuild = GetTypeToBuild(context);

            if (!IsBuildingLayer(typeToBuild))
            {
                return;
            }

            if (IsThereAnotherLayerInHierarchy(context))
            {
                var resolvedParameter  = new ResolvedParameter <IDrillBit>(CompositionRoot.SecondDrill);
                var dependencyOverride = new DependencyOverride <IDrillBit>(resolvedParameter);

                AddResolverOverrides(ref context, dependencyOverride);
            }
        }
예제 #20
0
        public void WhenOverridingMultipleDependencies()
        {
            IUnityContainer container = new UnityContainer();

            container.RegisterType <Type4DependingOnOtherType>().RegisterType <IToWhichDependent, Type1ToWhichDependent>(new InjectionConstructor(111)).RegisterType <Dependent>(new InjectionProperty("X", 111));
            Dependent overrideDependent1 = new Dependent();

            overrideDependent1.X = 9999;
            IToWhichDependent overrideDependent2 = new Type2ToWhichDependent(8888);
            DependencyOverride <Dependent>         overrideParam1 = new DependencyOverride <Dependent>(overrideDependent1);
            DependencyOverride <IToWhichDependent> overrideParam2 = new DependencyOverride <IToWhichDependent>(overrideDependent2);

            var result = container.Resolve <Type4DependingOnOtherType>(overrideParam1, overrideParam2);

            Assert.IsInstanceOfType(result.IToWhichDependent, typeof(Type2ToWhichDependent));
            Assert.IsInstanceOfType(result.OneMoreIToWhichDependent, typeof(Type2ToWhichDependent));
            Assert.AreEqual <int>(8888, result.IToWhichDependent.X);
            Assert.AreEqual <int>(8888, result.OneMoreIToWhichDependent.X);
            Assert.AreEqual <int>(9999, result.NewToWhichDependent.X);
        }