sdk
は Dart SDK のバージョン(Flutter SDK ではない)flutter
が Flutter のバージョン
メモなので、間違いなどあればコメントいただけると嬉しいです。
wikipediaより。
そんなに深くない気がしますが。Microsoft.Extensions.DependencyInjection
の DI についてざっくりまとめた記事です。なお、長いので、Microsoft.Extensions.DependencyInjection
を M.E.DI
と略します。
例によって、公式ドキュメント にすべて書いてある、はずですが、ここでは少し別の観点でまとめてみます。また、ドキュメントに書いてない(と思う)内部実装についてもいくつか書いてあります。
IServiceCollection
の拡張メソッドを使用して、フレームワークやランタイムが提供するIServiceCollection
の実装に対して登録していきます。IServiceCollection
はServiceDescriptor
というサービスについてのスペックを表すオブジェクトのコレクションである。ServiceDescriptor
はサービス型をキーにして、ライフタイムと実装を持ちます。
最近は .NET Core の仕事をしています。
さて、ASP.NET Core を使っていると、とりあえず構成情報みたいなものは IOptions<TOptions>
で受け取っておけみたいな雑な話を目にします。
一応 公式のドキュメント はあるのですが、正直読んでもよくわからない。柔軟なんだねー、なるほどねーみたいな感じになりました。なので、ここではできる限り(?)網羅的に解説してみようと思います。
IOptions<TOptions>
って何?(TOptions
を直接注入すればいいじゃん)IOptionsSnapshot<TOptions>
とかたくさんあってよくわかんない- オプションの動的更新に必要なものは?
IoT Edgeの中で、ホスト(つまりDockerコンテナーの外側)で動作するコンポーネントとして、IoT Edgeセキュアデーモン(iotedged
)とCLI(iotedge
)がある。
これらはedgeletと呼ばれるネイティブコンポーネントで動作する(ちなみに、edgeletのほとんどはRustで記述されている。HSMと直接通信する部分のみC言語で記述されている)。
IoT Edgeセキュアデーモンは、以下の役割を持つコンポーネントである。
- HSM(Hardware Security Module)を抽象化する
- Dockerコンテナー内で動作するIoT Edgeのモジュールに対して、モジュールのアイデンティティに関わる情報のストレージを提供する
- 型パラメーターの制約に
System.Enum
型があるだけ struct
制約は付かない。
- 型パラメーターにカスタム属性
System.Runtime.CompilerServices.IsUnamagedAttribute
が適用されているかどうか。なお、拡張メソッドと同じく、属性の型のアセンブリ名は無視される。C# 8 previewコンパイラーは、この属性をコンパイル結果のアセンブリに生成している。 - 型パラメーターに
modreq
としてSystem.Runtime.InteropServices.UnmanagedType
が指定されている。 struct
制約も同時に付く。
// Copyright(c) 2016 FUJIWARA, Yusuke | |
// Licensed under the Apache License, Version 2.0 (the "License"); | |
// you may not use this file except in compliance with the License. | |
// You may obtain a copy of the License at | |
// | |
// http://www.apache.org/licenses/LICENSE-2.0 | |
// | |
// Unless required by applicable law or agreed to in writing, software | |
// distributed under the License is distributed on an "AS IS" BASIS, | |
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
// 本体のほう | |
{ | |
"version": "1.0.0-*", | |
"dependencies": { | |
"System.Runtime": "4.1.0", | |
"System.Collections": "4.0.11", | |
"System.ObjectModel": "4.0.12", | |
"System.Reflection": "4.1.0", | |
"System.Reflection.Extensions": "4.0.1", |
このエントリはWindows & Microsoft技術 基礎 Advent Calendar 2015の6日目です。
.NETのトラブルシュートをしたり、実装に興味があったり、日々の仕事に疲れた心への癒やしとして、.NETの実装を見たいことがあると思います。このエントリでは、そういった方向けに簡単なガイドを提供します。
.NETの実装は色々あるのですが、この記事では.NET 5向けの実装についての話をします。それ以前のMicrosoft実装については、クラスライブラリ部分のみリファレンスソースとして公開されているので、そちらを参照すると良いでしょう(ランタイムそのもののソースコードは公開されていません)。ライセンスもMITライセンスなので安心です。ただし、クライアント側(Windows FormsやWPF)のコードはgithubには公開されておらず、Microsoftのサイトで公開されており、そのライセンスはMicrosoft Reference Source Licenseとなっていますので、デバッグや相互運用性の向上を目的としない使用には注意が必要です。XamarinやUnityで使っているMonoについては、素直にMonoのソースツリーを見ればいいでしょう。ただし、クラスライブラリはMITライセンスですが、ランタイムはLGPLなので、人によっては注意が必要かもしれません。
using System; | |
static class Program | |
{ | |
static void Main() | |
{ | |
Test( "a" ); | |
Test( 1 ); | |
Test<int?>( 1 ); | |
} |