C波源発生器革命
8395 ワード
それとともに.NET 5では、マイクロソフトがCソースを生成しました.
そして、私の最初の発電機を作成した後、私はそれがクールな機能の一つと考えています.NET開発者が使用できます.
コードを解析し、動的にファイルを生成し、ビルドパイプラインに注入するプログラムです.
JSONからC を使用してPOCOクラスを拡張する POCOクラスからのビルダーの生成 マッピングの拡張メソッドを生成する
各発電機は2つの方法を持っています:既存のコードを分析するものと新しいコードを生成するもの.
あなたが働くならば.あなたがよく知っているかもしれないネット芯
私たちはよくJSONを表すPOCOクラスを作成し、それからスタートアップでそれらを登録する必要があります
なぜ、我々はソースジェネレータに我々のために重い持ち上げをしさせませんか?
それで、私は正確にそれをするプレビューnugetをつくります! 読める 各オブジェクトプロパティに対して、新しいC プライベートスタートアップクラス 人々がする必要がある唯一のものは、彼らを作ることです このJSON
生成内容:
ご覧の通り、この新機能の背景にはたくさんの可能性があります.
それは完全に反射を置き換えることはありませんが、大幅にライブラリの多くのパフォーマンスを向上させることができます!
しかし、プレビューでは、制限があり、物事が変更される可能性がありますので、そのことを念頭に置いておく!
私の例のコードを見つけることができますhere on GitHub .
Introducing C# Source Generators Source Generators Cookbook The pain points of C# source generators Source generators colletion
そして、私の最初の発電機を作成した後、私はそれがクールな機能の一つと考えています.NET開発者が使用できます.
しかし、ソースジェネレータは何ですか?
コードを解析し、動的にファイルを生成し、ビルドパイプラインに注入するプログラムです.
使用例?
超塩基例
各発電機は2つの方法を持っています:既存のコードを分析するものと新しいコードを生成するもの.
[Generator]
public class MyGenerator : ISourceGenerator
{
public void Initialize(GeneratorInitializationContext context) { }
public void Execute(GeneratorExecutionContext context) { }
}
C単位のクラスを生成するvar source = @"
namespace Dev.To {{
public class Post {{
public string Title {{ get; set; }}
}}
}}";
context.AddSource("Post.cs", SourceText.From(source, Encoding.UTF8));
あまり見えないかもしれない.しかし、部分クラスや拡張メソッドで何ができるかについて考えてください.どうやって使うの
あなたが働くならば.あなたがよく知っているかもしれないネット芯
appsettings.json
.私たちはよくJSONを表すPOCOクラスを作成し、それからスタートアップでそれらを登録する必要があります
IOptions<>
.なぜ、我々はソースジェネレータに我々のために重い持ち上げをしさせませんか?
それで、私は正確にそれをするプレビューnugetをつくります!
appsettings
内容RegisterOptions
新しいクラスを登録するメソッドservices.Configure<PropertyName>(Configuration.GetSection(nameof(PropertyName)));
Startup
部分的呼び出しRegisterOptions
インConfigureServices
メソッド.{
"MyOtherOptions": {
"MyString": "any",
"MyInt": 1,
"MyDouble": 1.1,
"MyBool": true,
"MyObject": {
"MyObjectString": "any"
},
"MyArray": [ "any" ]
}
}
これらのクラスを生成します:生成内容:
// MyOtherOptions.cs
public class MyOtherOptions
{
public string MyString { get; set; }
public int MyInt { get; set; }
public double MyDouble { get; set; }
public bool MyBool { get; set; }
public MyObject MyObject { get; set; }
public string[] MyArray { get; set; }
}
// Startup.Generated.cs
public partial class Startup
{
private void RegisterOptions(IServiceCollection services)
{
services.Configure<MyOtherOptions>(Configuration.GetSection(nameof(MyOtherOptions)));
}
}
最終語
ご覧の通り、この新機能の背景にはたくさんの可能性があります.
それは完全に反射を置き換えることはありませんが、大幅にライブラリの多くのパフォーマンスを向上させることができます!
しかし、プレビューでは、制限があり、物事が変更される可能性がありますので、そのことを念頭に置いておく!
私の例のコードを見つけることができますhere on GitHub .
便利なリンク
Reference
この問題について(C波源発生器革命), 我々は、より多くの情報をここで見つけました https://dev.to/matteobortolazzo/the-c-source-generators-revolution-34k4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol