Значение IController возвращено в троичный оператор

Может ли кто-нибудь сказать мне, что говорит мне это предложение?

                 return controllerType != null
                         ? _container.Resolve(controllerType) as IController
                           : base.GetControllerInstance(requestContext, controllerType);

Внутри кода:

using Dominio.MesaEntrada.Expedientes;

namespace MVC.Client.Extensiones.ControllerFactories
{
    public class UnityControllerFactory : DefaultControllerFactory
    {
        private readonly IUnityContainer _container;

        public UnityControllerFactory(IUnityContainer container)
        {
            _container = container;
        }


        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
        {
            try
            {
                 return controllerType != null
                         ? _container.Resolve(controllerType) as IController
                           : base.GetControllerInstance(requestContext, controllerType);
            }
            catch (ResolutionFailedException)
            {
                //Log the exception if needed
                //Try to resolve using default factory
                return base.GetControllerInstance(requestContext, controllerType);
            }
         }
    }
}
0
задан 26.12.2016, 15:48
0 ответов

Он говорит тебе, что если controllerType != null тогда возврати

_container.Resolve(controllerType) as IController

напротив, если controllerType == null возврати

base.GetControllerInstance(requestContext, controllerType)

Он - тройной оператор, более объясненный в: https://msdn.microsoft.com/es-es/library/zakwfxx4 (v=vs.100) .aspx

0
ответ дан 03.12.2019, 17:59

В действительности его один if но линии, примера:

If традиционный:

 string resultado = "";    
 if (bandera){
    resultado = "Bandera es verdadero.";
 }else{
    resultado = "Bandera es falso.";
 }

If упрощенный:

 string resultado = bandera ? "Bandera es verdadero." : "Bandera es falso.";    

Два предыдущих примера делают это самим, добавлять стоимость к переменной результат, если изменчивый флаг true или false.

Объясненный другой формы if упрощенный он разделяется на три секции:

  1. Условие
  2. Истинный результат
  3. Фальшивый результат

Синтаксис был бы следующей:

<condicion> ? <resultado true> : <resultado false>

Я надеюсь смочься помогать тебе, привет.

Объяснение кода:

 protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
        {
            try
            {
                 return controllerType != null
                         ? _container.Resolve(controllerType) as IController
                           : base.GetControllerInstance(requestContext, controllerType);
            }
            catch (ResolutionFailedException)
            {
                //Log the exception if needed
                //Try to resolve using default factory
                return base.GetControllerInstance(requestContext, controllerType);
            }
         }

Метод GetControllerInstance получи объект System.Web.Routing.RequestContext requestContext и абзац получает, что тип объекта: Type controllerType, у которого могут быть данные или быть null

то, что он делает первым, состоит в том, чтобы спрашивать, если полученный тип не null:

controllerType != null

Если выполняется это условие:

_container.Resolve(controllerType) as IController

_container <---это объект, который ты считаешь определенным более наверху

Как кажется, назови метод .Resolve который он получает как parametor controllerType и он это обращает в тип IController <-Для того, чтобы он возвратил тебя controller которого требуют для этого типа controller

Если не выполняется условие, или если тип controller он null:

base.GetControllerInstance(requestContext, controllerType)

Тебя возвращает инстанция основания (DefaultControllerFactory), и он основывается в controllerType полученный и в requestContext

Кратко этот код использует Интерфейсы и наследство, чтобы получать объект типа IController (это должен быть интерфейс), с IF единственное, что он делает, состоит в том, чтобы санкционировать для того, чтобы тебя не возвратил объект null или он опустошил.

0
ответ дан 03.12.2019, 17:59