示例#1
0
        public void Satisfied_NullContract_ThrowsArgumentNullException()
        {
            var descriptor = ExportDescriptor.Create(Activator, new Dictionary <string, object>());
            var target     = new ExportDescriptorPromise(new CompositionContract(typeof(int)), "Origin", true, () => Enumerable.Empty <CompositionDependency>(), dependencies =>
            {
                return(ExportDescriptor.Create(Activator, new Dictionary <string, object>()));
            });

            AssertExtensions.Throws <ArgumentNullException>("contract", () => CompositionDependency.Satisfied(null, target, false, new object()));
        }
示例#2
0
        public void Missing_Invoke_ReturnsExpected()
        {
            var contract = new CompositionContract(typeof(int));

            CompositionDependency dependency = CompositionDependency.Missing(contract, "Site");

            Assert.Same(contract, dependency.Contract);
            Assert.Equal("Site", dependency.Site);
            Assert.Null(dependency.Target);
            Assert.False(dependency.IsPrerequisite);

            Assert.Equal("Site", dependency.ToString());
        }
示例#3
0
        public void Oversupplied_Invoke_ReturnsExpected(IEnumerable <ExportDescriptorPromise> targets)
        {
            var contract = new CompositionContract(typeof(int));

            CompositionDependency dependency = CompositionDependency.Oversupplied(contract, targets, "Site");

            Assert.Same(contract, dependency.Contract);
            Assert.Equal("Site", dependency.Site);
            Assert.Null(dependency.Target);
            Assert.False(dependency.IsPrerequisite);

            Assert.Equal("Site", dependency.ToString());
        }
示例#4
0
            public override IEnumerable <ExportDescriptorPromise> GetExportDescriptors(CompositionContract contract, DependencyAccessor descriptorAccessor)
            {
                var target = new ExportDescriptorPromise(new CompositionContract(typeof(int)), "Origin", true, () =>
                {
                    return(new CompositionDependency[]
                    {
                        CompositionDependency.Missing(contract, "site")
                    });
                }, dependencies =>
                {
                    return(ExportDescriptor.Create(Activator, new Dictionary <string, object>()));
                });

                return(new ExportDescriptorPromise[] { target });
            }
示例#5
0
        public void ResolveRequiredDependency_PromisesReturnsEmpty_ReturnsMissing()
        {
            var accessor = new SubAccessor {
                Result = new ExportDescriptorPromise[0]
            };

            var contract = new CompositionContract(typeof(int));
            CompositionDependency dependency = accessor.ResolveRequiredDependency("Site", contract, true);

            Assert.Same(contract, accessor.Contract);

            Assert.Same(contract, dependency.Contract);
            Assert.Equal("Site", dependency.Site);
            Assert.False(dependency.IsPrerequisite);
            Assert.Null(dependency.Target);
        }
        private IEnumerable <CompositionDependency> GetDependencies(ServiceDescriptor service, CompositionContract contract, DependencyAccessor descriptorAccessor)
        {
            var constructorWithArgs = service.ImplementationType.GetConstructors().FirstOrDefault(d => d.GetParameters().Length > 0);

            if (constructorWithArgs == null)
            {
                yield break;
            }

            Log.Warn($"A constructor with parameters is used. This area is not implemented properly yet.");
            foreach (var parameter in constructorWithArgs.GetParameters())
            {
                // this code is untested. not sure how to implement it.
                yield return(CompositionDependency.Missing(contract, parameter.ParameterType));
            }
        }
示例#7
0
        public void Satisfied_Invoke_ReturnsExpected()
        {
            var contract   = new CompositionContract(typeof(int));
            var descriptor = ExportDescriptor.Create(Activator, new Dictionary <string, object>());
            var target     = new ExportDescriptorPromise(new CompositionContract(typeof(int)), "Origin", false, () => Enumerable.Empty <CompositionDependency>(), dependencies =>
            {
                return(ExportDescriptor.Create(Activator, new Dictionary <string, object>()));
            });

            CompositionDependency dependency = CompositionDependency.Satisfied(contract, target, true, "Site");

            Assert.Same(contract, dependency.Contract);
            Assert.Equal("Site", dependency.Site);
            Assert.Same(target, dependency.Target);
            Assert.True(dependency.IsPrerequisite);

            Assert.Equal("'Site' on contract 'Int32' supplied by Origin", dependency.ToString());
        }
示例#8
0
        public void ResolveRequiredDependency_PromisesReturnsOneTarget_ReturnsStatisfied()
        {
            var descriptor = ExportDescriptor.Create(Activator, new Dictionary <string, object>());
            var target     = new ExportDescriptorPromise(new CompositionContract(typeof(int)), "Origin", false, () => Enumerable.Empty <CompositionDependency>(), dependencies =>
            {
                return(ExportDescriptor.Create(Activator, new Dictionary <string, object>()));
            });
            var accessor = new SubAccessor {
                Result = new ExportDescriptorPromise[] { target }
            };

            var contract = new CompositionContract(typeof(int));
            CompositionDependency dependency = accessor.ResolveRequiredDependency("Site", contract, true);

            Assert.Same(contract, accessor.Contract);

            Assert.Same(contract, dependency.Contract);
            Assert.Equal("Site", dependency.Site);
            Assert.True(dependency.IsPrerequisite);
            Assert.Same(target, dependency.Target);
        }
示例#9
0
        public void Satisfied_NullTarget_ThrowsArgumentNullException()
        {
            var contract = new CompositionContract(typeof(int));

            AssertExtensions.Throws <ArgumentNullException>("target", () => CompositionDependency.Satisfied(contract, null, false, new object()));
        }
示例#10
0
        public void Missing_NullSite_ThrowsArgumentNullException()
        {
            var contract = new CompositionContract(typeof(int));

            AssertExtensions.Throws <ArgumentNullException>("site", () => CompositionDependency.Missing(contract, null));
        }
示例#11
0
 public void Missing_NullContract_ThrowsArgumentNullException()
 {
     AssertExtensions.Throws <ArgumentNullException>("contract", () => CompositionDependency.Missing(null, new object()));
 }
示例#12
0
        public void Oversupplied_NullSite_ThrowsArgumentNullException()
        {
            var contract = new CompositionContract(typeof(int));

            AssertExtensions.Throws <ArgumentNullException>("site", () => CompositionDependency.Oversupplied(contract, Enumerable.Empty <ExportDescriptorPromise>(), null));
        }
示例#13
0
        public void Oversupplied_NullTargets_ThrowsArgumentNullException()
        {
            var contract = new CompositionContract(typeof(int));

            AssertExtensions.Throws <ArgumentNullException>("targets", () => CompositionDependency.Oversupplied(contract, null, new object()));
        }
示例#14
0
 public void Oversupplied_NullContract_ThrowsArgumentNullException()
 {
     AssertExtensions.Throws <ArgumentNullException>("contract", () => CompositionDependency.Oversupplied(null, Enumerable.Empty <ExportDescriptorPromise>(), new object()));
 }
 public bool TryResolveOptionalDependency(object site, CompositionContract contract, bool isPrerequisite, out CompositionDependency dependency);