Winforms MEF和在运行时加载EntityTypeConfiguration
你不能在自己的岗位上投票 0 嗨 我正在开发这个(http://arg-co.com/SabteNam%20-%20Copy.zip)的windows应用程序,对于我的DAL,我使用实体框架。但是每个扩展都有自己的EntityTypeConfiguration,所以我决定使用[Import]和[Export]将它们添加到我的DbContext的OnModelCreating方法中。这里的问题是,在位于“SabteNamDataAccess”库的“SabteNamDbContext”类中,“\u Configs”未初始化,因此我无法迭代它并将其项添加到“modelBuilder.Configurations” 在“SampleConfiguration”类的源代码中,我注释掉了“[Export(typeof(IDbConfiguration))]”,但即使取消注释这部分代码,也不会导致应用程序正常工作 有趣的是,如果我在“Main”windows窗体中使用以下代码,“\u Configs”将被初始化:Winforms MEF和在运行时加载EntityTypeConfiguration,winforms,entity-framework,mef,Winforms,Entity Framework,Mef,你不能在自己的岗位上投票 0 嗨 我正在开发这个(http://arg-co.com/SabteNam%20-%20Copy.zip)的windows应用程序,对于我的DAL,我使用实体框架。但是每个扩展都有自己的EntityTypeConfiguration,所以我决定使用[Import]和[Export]将它们添加到我的DbContext的OnModelCreating方法中。这里的问题是,在位于“SabteNamDataAccess”库的“SabteNamDbContext”类中,“\u
[ImportMany(typeof(IDbConfiguration))]
public IEnumerable<EntityTypeConfiguration<object>> _Configs { get; set; }
[ImportMany(typeof(IDbConfiguration))]
公共IEnumerable_配置{get;set;}
如何解决这个问题?虽然我意识到这可能不再对您有用,但我们使用了一个变体,我建议您阅读 在我们的例子中,我们已经为我们的扩展创建了一个接口,不仅是像Scott那样的实体配置,它允许我们不仅加载配置,还允许每个扩展加载工厂和测试数据,向核心应用程序添加新的权限类型,等等 我们的OnModelCreating看起来像这样:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// load core object mappings
modelBuilder.Configurations.Add(new UserConfiguration());
modelBuilder.Configurations.Add(new PermissionConfiguration());
// get plugin assemblies
var catalog = new DirectoryCatalog("bin");
var container = new CompositionContainer(catalog);
container.ComposeParts();
var plugins = container.GetExportedValues<IPlugin>();
// load plugin object mappings
foreach (IPlugin plugin in plugins)
{
plugin.RegisterDomainEntities(modelBuilder.Configurations);
}
base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
//加载核心对象映射
modelBuilder.Configurations.Add(newuserconfiguration());
modelBuilder.Configurations.Add(newpermissionconfiguration());
//获取插件程序集
var目录=新目录目录(“bin”);
var容器=新的合成容器(目录);
container.ComposeParts();
var plugins=container.GetExportedValues();
//加载插件对象映射
foreach(插件中的IPlugin插件)
{
plugin.registerDomainities(modelBuilder.Configurations);
}
基于模型创建(modelBuilder);
}
我使用MEF本身并加载配置,然后使用Activator.CreateInstance从配置创建实例,并将创建的实例添加到modelBuilder.configurations