コード例 #1
0
 public virtual Maybe <TExodata> TryResolve <TContext, TSubject>(Maybe <TContext> context, Maybe <TSubject> subject, MemberInfo member)
 {
     return(ExodataResolver
            .ToMaybe()
            .Or(Ioc.TryResolve <IExodataResolver>)
            .SelectMaybe(x => x.TryResolve(ExodataRequest.Create <TExodata, TContext, TSubject>(this, context, subject, member)))
            .SelectMaybe(x => EnsureValid(x, "bound")));
 }
コード例 #2
0
        public void TryResolve_WithNoBindings_ReturnsNoValue()
        {
            var symbol = new Symbol();
            var source = new ExodataBindingModule();

            var resolver = new ExodataResolver(new[] { source });

            Maybe <int> value = resolver.TryResolve(ExodataRequest.Create <int, object, object>(symbol, Maybe <object> .NoValue, Maybe <object> .NoValue, null));

            Assert.AreEqual(Maybe <int> .NoValue, value);
        }
コード例 #3
0
        public void TryResolve_WithNonAmbiguousBindingSelection_YieldsValue()
        {
            var symbol = new Symbol();
            var source = new ExodataBindingModule();

            source.Bind(symbol, 42);

            var resolver = new ExodataResolver(new[] { source });

            Maybe <int> result = resolver.TryResolve(ExodataRequest.Create <int, object, object>(symbol, Maybe <object> .NoValue, Maybe <object> .NoValue, null));

            Assert.AreEqual(42, result.Value);
        }
コード例 #4
0
        public void TryResolve_WithAmbiguousBindingSelection_ThrowsAmbiguousExodataBindingsException()
        {
            var symbol = new Symbol();
            var source = new ExodataBindingModule();

            source.Bind(symbol, 42);
            source.Bind(symbol, 42);

            var resolver = new ExodataResolver(new[] { source });

            Maybe <int> result = resolver.TryResolve(ExodataRequest.Create <int, object, object>(symbol, Maybe <object> .NoValue, Maybe <object> .NoValue, null));

            var exception = Assert.Throws <AmbiguousExodataBindingsException>(() => { var x = result.HasValue; });

            Assert.IsNotNull(exception);
            Assert.AreEqual(2, exception.Bindings.Count());
        }