Я пытаюсь написать набор исходных генераторов для генерации заводских классов в приложении Blazor. < /p>
Более старые примеры - все используют isourcegenerator < /code>, которые, как я считаю, были заменены
IIncrementalGenerator.
Единственный хороший пример, который я могу найти, - это Enumgenerator (входит в какие -либо детали, помимо многих постов, которые отрывают одни и те же банальные и бесполезные примеры).
То, что я хочу, - это найти все классы, которые реализуют интерфейс, вытащили из них некоторую информацию (может быть, на основе класса атрибут, если я не могу извлечь его в другой путь) и тогда надумать. Старые примеры используют контекст.[Generator]
public class MySourceGenerator : IIncrementalGenerator
{
public readonly record struct PresentationFactoryToGenerate
{
public readonly string Name;
public readonly string Id;
public readonly string Editor;
public PresentationFactoryToGenerate(string name, string editor, string id)
{
this.Name = name;
this.Editor = editor;
this.Id = id;
}
}
public void Initialize(IncrementalGeneratorInitializationContext context)
{
Debugger.Launch();
var presenters = Enumerable.Empty();
// STUCK HERE
// Get the list of presenters implementing IEditPresenter
foreach (var presenter in presenters)
context.RegisterPostInitializationOutput(ctx => ctx.AddSource($"{presenter.Name}EditPresenterFactory.g", SourceText.From(BuildPresenterFactory(presenter), Encoding.UTF8)));
}
private string BuildPresenterFactory(PresentationFactoryToGenerate item)
{
var code = $$"""
namespace Blazr.App.Presentation;
public class {{item.Name}}EditPresenterFactory
{
private readonly IServiceProvider _serviceProvider;
public {{item.Name}}EditPresenterFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public async ValueTask GetPresenterAsync({{item.Id}} id)
{
var presenter = ActivatorUtilities.CreateInstance(_serviceProvider);
ArgumentNullException.ThrowIfNull(presenter);
await presenter.LoadAsync(id);
return presenter;
}
}
""";
return code;
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ace-in-the
Как получить классы в генераторе источника, который реализует, скажите интерфейс в целевом проекте ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение