Внедрение зависимости является вырожденной формой неявная передача параметров , и целью является по существу то же, для решения то, что звонило проблема Конфигураций :
проблема конфигураций состоит в том, чтобы распространить предпочтения во время выполнения всюду по программе, позволив нескольким параллельным конфигурациям модели сосуществовать безопасно при статически гарантируемом разделении.
платформы Внедрения зависимости компенсируют из-за отсутствия неявные параметры , функции С приправой карри , и удобные средства для монады на языке.
Дон не использовать eval. Вы можете получить ссылку на именованную глобальную переменную или функцию из объекта window
:
var callbackfunction= window[json.callback.callbackName];
И пытаться сериализовать ваши значения в строку только для того, чтобы их ненадежно проанализировать обратно в JavaScript, глупо. Вызов функции явно:
callbackfunction.call(window, json.callback.callbackParams.param1, json.callback.callbackParams.param2);
( window
здесь фиктивное значение для this
, когда вы не используете методы объекта.
Если вы смотрите на шаблон FrontController, вам следует изучить возможность написания Custom ControllerFactory, который наследуется от DefaultControllerFactory, а затем переопределить метод CreateController.
Вы можете зарегистрировать свою фабрику, используя приведенный ниже код.
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new MyCustomControllerFactory();
RegisterRoutes(RouteTable.Routes);
}
На фабрике контроллеров у вас есть доступ к RequestContext, так что вы можете изменить RouteData по мере необходимости и передать права на правильный контроллер.
Вы, конечно, можете просто установить собственный маршрут для Home / Index, который идет к OtherController.ShowNumberOfThings ()
routes.MapRoute("Home", "Home/Index/{id}",
new {controller = "Other", action = "ShowNumberOfThings", id = 100});
Если вы хотите, чтобы при нажатии на действие «Индекс» вам отображалось «Количество вещей: 100», почему бы напрямую не визуализировать соответствующее представление:
public class HomeController : Controller
{
public ActionResult Index()
{
return View("~Views/Other/ShowNumberOfThings.aspx", 100);
}
}
другим подходом будет использование частичных представлений
вместо ~ Views / Other / ShowNumberOfThings.aspx
, вы можете поместить свое представление в ~ Views /shared/ShowNumberOfThings.ascx
иметь оба представления ~ Views / Other / ShowNumberOfThings.aspx
и ~ Views / Home / Index.aspx
реализуют частичное представление
public class HomeController : Controller
{
public ActionResult Index()
{
return View(100);
}
}
public class OtherController : Controller
{
public ActionResult ShowNumberOfThings(int index)
{
return View(index);
}
}
и в оба представления реализуют частичное представление
<% Html.RenderPartial("~Views/shared/ShowNumberOfThings.ascx", ViewData.Model); %>
, вы можете изменить int для любого объекта, который будет передан в модель