示例#1
0
        public object GetService(Type serviceType)
        {
            IRequest request = resolutionRoot.CreateRequest(serviceType, null,
                                                            new Parameter[0], true, true);

            return(resolutionRoot.Resolve(request).SingleOrDefault());
        }
        public object GetService(Type serviceType)
        {
            if (resolver == null)
            {
                throw new ObjectDisposedException("this", "This scope has been disposed");
            }

            IRequest request = resolver.CreateRequest(serviceType, null, new Parameter[0], true, true);

            return(resolver.Resolve(request).SingleOrDefault());
        }
示例#3
0
 private IRequest CreateRequest(Type serviceType)
 {
     return(resolutionRoot.CreateRequest(serviceType,
                                         null,
                                         new Parameter[0],
                                         true,
                                         true));
 }
示例#4
0
        private static IEnumerable <object> GetResolutionIterator(IResolutionRoot root, Type service, Func <IBindingMetadata, bool> constraint, IEnumerable <IParameter> parameters, bool isOptional, bool isUnique)
        {
            Ensure.ArgumentNotNull(root, "root");

            var request = root.CreateRequest(service, constraint, parameters, isOptional, isUnique);

            return(root.Resolve(request));
        }
        private static object ResolveSingle(IResolutionRoot root, Type service, Func <IBindingMetadata, bool> constraint, IReadOnlyList <IParameter> parameters, bool isOptional, bool isUnique)
        {
            Ensure.ArgumentNotNull(root, nameof(root));

            var request = root.CreateRequest(service, constraint, parameters, isOptional, isUnique);

            return(root.ResolveSingle(request));
        }
        private static T DoTryGetAndThrowOnInvalidBinding <T>(IResolutionRoot root, Func <IBindingMetadata, bool> constraint, IReadOnlyList <IParameter> parameters)
        {
            Ensure.ArgumentNotNull(root, nameof(root));

            var request = root.CreateRequest(typeof(T), constraint, parameters, true, true);

            request.ForceUnique = true;
            return((T)root.ResolveSingle(request));
        }
示例#7
0
        private static bool CanResolve(IResolutionRoot root, Type service, Func <IBindingMetadata, bool> constraint, IEnumerable <IParameter> parameters, bool isOptional, bool isUnique)
        {
            Ensure.ArgumentNotNull(root, "root");
            Ensure.ArgumentNotNull(service, "service");
            Ensure.ArgumentNotNull(parameters, "parameters");

            IRequest request = root.CreateRequest(service, constraint, parameters, isOptional, isUnique);

            return(root.CanResolve(request));
        }
        private static IEnumerable <object> GetResolutionIterator(IResolutionRoot root, Type service, Func <IBindingMetadata, bool> constraint, IEnumerable <IParameter> parameters, bool isOptional, bool isUnique)
        {
            Contract.Requires(root != null);
            Contract.Requires(service != null);
            Contract.Requires(parameters != null);

            var request = root.CreateRequest(service, constraint, parameters, isOptional, isUnique);

            return(root.Resolve(request));
        }
示例#9
0
        public static IEnumerable <T> TryGetAll <T>(this IResolutionRoot resolutionRoot)
        {
            var         request    = resolutionRoot.CreateRequest(typeof(IFoo), x => true, Enumerable.Empty <IParameter>(), true, false);
            IEnumerable results    = resolutionRoot.Resolve(request);
            IEnumerator enumerator = results.GetEnumerator();

            while (MoveNextIgnoringActivationException(enumerator))
            {
                yield return((T)enumerator.Current);
            }
        }
 public override IController CreateController(RequestContext requestContext, string controllerName)
 {
     //You can improve this later if you want -> you'll need to figure out if your controller will fit into this case
     //You can use marker interfaces, common supertype, etc... that's up to you
     if (controllerName.Equals("home", StringComparison.InvariantCultureIgnoreCase))
     {
         var controllerType       = typeof(HomeController);
         var isChild              = requestContext.RouteData.DataTokens.ContainsKey(ParentActionViewContextToken);
         var constructorArgument  = new ConstructorArgument("someName", (isChild) ? "Child" : "Nope");
         var requestForDependency = _resolutionRoot.CreateRequest(typeof(IServiceClient), null, new Parameter[] { constructorArgument }, true, true);
         var dependency           = _resolutionRoot.Resolve(requestForDependency).SingleOrDefault();
         return((IController)_resolutionRoot.Get(controllerType, new ConstructorArgument("service", dependency)));
     }
     //Will go through the default pipeline (IDependencyResolver will be called, not affecting DI of other controllers)
     return(base.CreateController(requestContext, controllerName));
 }
示例#11
0
 private IRequest CreateRequest(Type serviceType)
 {
     return(_resolver.CreateRequest(serviceType, null, new Parameter[0], true, true));
 }
示例#12
0
        public IEnumerable <object> GetServices(Type serviceType)
        {
            var request = _resolutionRoot.CreateRequest(serviceType, null, new IParameter[0], true, true);

            return(_resolutionRoot.Resolve(request));
        }
示例#13
0
 public bool IsRegistered(Type t)
 {
     return
         (_container.CanResolve(_container.CreateRequest(t, null, new List <IParameter>(), false, false),
                                true));
 }