私はMEFを初めて使用し、理解するのに苦労しています。複数のユーザー ストアを動的にサポートする ASP.NET MVC アプリケーションを作成したいと考えています。これにはMEFを使用できると思いました。次の契約を定義しました。
public interface IUserProvider
{
List<ConfigurationOption> SupportedConfigurationKeys { get; }
void Start(List<ConfigurationOption> configuration);
List<UserInfo> GetUsers(UserInfo userInfo);
UserInfo GetUser(string id);
UserInfo Save(UserInfo userInfo);
bool Delete(UserInfo userInfo);
List<UserProperty> SupportedUserProperties { get; }
}
これを2回実装しました。カタログの作成とそのような構成
[ImportMany(typeof(IUserProvider))]
public IEnumerable<Lazy<IUserProvider, IDictionary<string, object>>> UserProviders { get; set; }
ApplicationCatalog userProviderCatalog = new ApplicationCatalog();
CompositionContainer container new CompositionContainer(userProviderCatalog);
container.ComposeParts(this);
次のようにインスタンスを作成できます。
UserProviders.Where(x => x.Metadata.ContainsKey("SystemName") && x.Metadata["SystemName"].ToString() == "ActiveDirectory").FirstOrDefault();
作成後、プロバイダーを構成して使用します。ただし、リクエストごとにこれらの手順を繰り返したくはありません。そこで疑問が生じます。
カタログ コンテナとその利用可能なすべてのアプリケーションをどのように作成しますか? 私が見つけることができるのは、参照がコントローラーファクトリーによって保持されているコントローラーの例だけですが、今回は関係ありません。別のユース ケースは、さまざまなファイル タイプを操作するためのコンテンツ プラグインです。私もすべてのリクエストに対してそれらを作成したくありません。application_start でこれを行い、それらを維持したいと思います。静的クラスについて考えましたが、それを container.compose と組み合わせるにはどうすればよいですか?