Microsoft Managed Extensibility Framework

6月4日、Microsoft開発チームがManaged Extensibility Framework(MEF)CTPを発表しました。 MEFは、最小限のコードでプロジェクトに拡張性サポート(プラグインなど)を実装できるメカニズムです。

開発者からのメッセージへのリンク: weblogs.asp.net/whaggard/archive/2008/06/04/first-managed-extensibility-framework-mef-bits-released.aspx

CTPを例とドキュメントと共にダウンロードするには、 code.msdn.microsoft.com / mefにアクセスしてください。
MEFとは何かを理解するために、以下のドキュメントから簡単な例を示します。

それでは、MEFは何を与えますか? プロジェクトのドキュメントの最初の例を検討してください。 最初のコードは、ボタンのタイトルに影響を与える単純なプロパティを記述しています。
[インポート( "ButtonCaption" )]
public String ButtonCaption
{
get {theButton.Content.ToString();を返します。 }
設定 {theButton.Content = value ; }
} *このソースコードは、 ソースコードハイライターで強調表示されています。


このプロパティは[Import( "ButtonCaption")]属性でマークされていることに注意してください。 これは、その意味で、外部拡張機能を介してデータを変更できる場所のマークです。

次に、最も単純な拡張が定義されます:
パブリック クラス ExampleStringProvider
{
[エクスポート( "ButtonCaption" )]
提供されたパブリック 文字列
{
get { return "MEF Hello World !!" ; }
}
} *このソースコードは、 ソースコードハイライターで強調表示されています。


コードからわかるように、データソースは[Export( "ButtonCaption")]を介してクラスで定義されます。これは、このクラスがボタンのヘッダー値を設定できることを示します。

最終的には、両方のコードが互いに会うために混合されます。
パブリック MyHelloWorld()
{
InitializeComponent();
CompositionContainerコンテナー=
新しい CompositionContainer();
container.AddComponent <MefHelloWorld.MyHelloWorld>( this );
container.AddComponent( new
ExampleStringProvider());
container.Bind();
} *このソースコードは、 ソースコードハイライターで強調表示されています。

このコードは、相互接続されたコンポーネントを構成コンテナーに登録し、Bindメソッドを呼び出すことにより、拡張機能からのデータを既存のプロパティにバインドします。 または、ExampleStringProvider拡張クラスを、たとえばテキストの代わりに日付を表​​示するなど、異なる機能を提供する別のクラスに置き換えることができます。
パブリック クラス DateStringProvider
{
[エクスポート( "ButtonCaption" )]
提供されたパブリック 文字列
{
get { return DateTime .Today.ToString(); }
}
} *このソースコードは、 ソースコードハイライターで強調表示されています。


簡単な例からわかるように、MEFは、リフレクションメカニズムを介したコード実行中にデータバインディングメカニズムを実装します。 アイデアは表面にあり、コードの機能を拡張するメカニズムを実装する便利で強力なライブラリをMicrosoftが作成してくれてうれしいです。

Source: https://habr.com/ru/post/J26853/


All Articles