我是 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; }
}
我实施了两次。创建目录并像这样组成
[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 结合起来?