使用 Source Generator 创建更简单的方法重载

问题描述 投票:0回答:1

我得到一个当前需要这样注册的课程(无反射工作)

ViewLocator = new StrongViewLocator()
    .Register<MainWindowViewModel>(new ViewDefinition(typeof(MainWindow), () => new MainWindow()))
    .Register<AddTextDialogViewModel>(new ViewDefinition(typeof(AddTextDialog), () => new AddTextDialog()));

我想使用这种更简单的语法生成与上述代码等效的代码。

ViewLocator = new StrongViewLocator()
    .Register<MainWindowViewModel, MainWindow>()
    .Register<AddTextDialogViewModel, AddTextDialog>();

如何使用 Source Generator 实现这一目标?

c# .net roslyn roslyn-code-analysis sourcegenerators
1个回答
1
投票

我相信扩展方法就足够了。

像这样的东西:

public static StrongViewLocator Register<TViewModel, TWindow>(this StrongViewLocator viewLocator)
    where TWindow : new()
{
    // .Register<MainWindowViewModel>(new ViewDefinition(typeof(MainWindow), () => new MainWindow()))
    // .Register<MainWindowViewModel, MainWindow>()

    return viewLocator.Register<TViewModel>(new ViewDefinition(typeof(TWindow), () => new TWindow()))
}
© www.soinside.com 2019 - 2024. All rights reserved.