Могут ли веб-элементы управления ASP.NET принимать что-либо в конструкторе?

Я хочу иметь безопасный контроль, но также хочу расширить существующую кнопку или текстовое поле, которое обеспечивает инфраструктура asp.net. Так что мой класс dec будет выглядеть примерно так:

public class MyTextBox : System.Web.UI.WebControls.TextBox

Я думал, что-то вроде шаблона стратегии для этого, но не уверен, как я мог бы передать ISecureControl в ctor или, возможно, метод init или что-то?

Я мог бы ответить на свой вопрос. Я думаю, я мог бы переопределить OnInit или OnPreInit или что-то еще, создать и передать его туда, но не был уверен, есть ли способ просто передать это как-то при создании?

override OnInit()
{
  secureControl = new MySecureControl();
}

override OnRender()
{
  if(secureControl.CanRender)
    base.OnRender();
}

Есть ли способ лучше? или я решаю свою проблему здесь...

2 ответа

Решение

Да, вот и все. Для этой конкретной ситуации я бы пошел дальше. Если бы MySecureControl имел свои собственные параметры конструктора, вы могли бы изучить внедрение зависимостей, но это означало бы, что вместо использования new вы бы использовали что-то вроде ObjectFactory.GetInstance<> или просто ObjectFactory.BuildUp(this) и использовали внедрение свойств. Не парься:)

Почему MyTextBox просто не реализует ISecureControl?

public class MyTextBox : TextBox, ISecureControl
Другие вопросы по тегам