У меня проблема с одной из моих библиотек компонентов бритвы.
У меня есть абстрактный базовый класс RazorHtmlComponent
для моих компонентов со свойством параметра [Parameter] public string InlineClass { get; set; }
, которое должно использоваться для css классов, которые должны быть сопоставлены с фактическим компонентом. Затем у меня есть другой базовый класс для каждого компонента, содержащий свойства компонента c, которые определяются следующим образом: abstract class BaseRazorButton: RazorHtmlComponent
Мой компонент, в этом примере RazorButton.razor
наследует от абстрактного базового класса кнопки BaseRazorButton
.
Проблема в том, что, когда я создаю экземпляр кнопки бритвы и задаю для свойства InlineClass
любое значение, оно остается нулевым в моем фактическом экземпляре RazorButton
.
Вот пример минимального кода для лучшего понимания:
Базовый класс:
public abstract class RazorHtmlComponent : ComponentBase, IRazorHtmlComponent
{
[Parameter] public string InlineClass { get; set; }
public DomDefinitionMapper ClassMapper { get; }
...
protected RazorHtmlComponent()
{
ClassMapper = new DomDefinitionMapper(InlineClass);
}
Mapper определения Dom:
public class DomDefinitionMapper
{
public List<Func<string>> DefinitionRepository { get; } = new List<Func<string>>();
public DomDefinitionMapper(string definition = "")
{
if (!string.IsNullOrEmpty(definition))
{
DefinitionRepository.Add(() => definition);
}
}
public string GetDefinitions(char separator = default)
=> separator.Equals(default) ?
string.Join(" ", DefinitionRepository.Select(i => i()).Where(i => i != null))
: string.Join($" {separator}", DefinitionRepository.Select(i => i()).Where(i => i != null));
}
Базовый класс кнопки:
public abstract class BaseRazorButton: RazorHtmlComponent
{
...
}
Компонент кнопки Razor:
@inherits BaseRazorButton
<button class="@ClassMapper.GetDefinitions()">
@Text
</button>
Использование кнопки Razor:
<RazorButton InlineClass="page"
Text="1"/>
Когда я проверяю внутри в просмотре, класс "страница", определенный внутри с использованием InlineClass
параметр не установлен. В режиме отладки ClassMapper
DefinitionRepository
не содержит класс.
Я что-то упустил? Я просто не понимаю, почему это не работает: /