我有以下代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var entityTypes = assembly
.GetTypes()
.Where(t =>
t.GetCustomAttributes(typeof(PersistentAttribute), inherit: true)
.Any());
foreach (var type in entityTypes)
{
entityMethod.MakeGenericMethod(type)
.Invoke(modelBuilder, new object[] { });
}
}
base.OnModelCreating(modelBuilder);
}
代码有效,我对它没有任何问题,但是,我试图完全理解它。我不明白的是这部分:
AppDomain.CurrentDomain.GetAssemblies();
我不明白它从哪里拉出它的组件。该列表是否来自项目参考?它是否来自bin文件夹,查看所有dll可能并带回一个列表?这是如何运作的?我需要正确理解这一点,因为我试图用这个实现Ninject,如果我这样做,就不会引用某些dll,我仍然需要在这个方法中考虑它们。
编辑:让我重申一下这个问题:如果我在我的项目的bin文件夹中放入一个test.dll并调用GetAssemblies方法,我的test.dll会成为其结果的一部分吗?如果答案是否定的,我如何让test.dll成为其结果的一部分,以便我可以使用它,而无需在主项目中实际引用test.dll。