lee*_*n3o 7 asp.net-core-mvc asp.net-core
我正在尝试制作基于模块的.NET核心应用程序,我需要在所有程序集中查找特定类型的所有类.因为每个模块都将构建在自己的项目中.
但我无法在ASP.NET Core中看到/找到如何做到这一点?任何指针将不胜感激.
Aam*_*mir 12
要从一个程序集加载所有类,请参阅下面的代码.在我的例子中IProfile是我需要搜索的界面
var all = Assembly
.GetEntryAssembly()
.GetReferencedAssemblies()
.Select(Assembly.Load)
.SelectMany(x => x.DefinedTypes)
.Where(type => typeof(IProfile).IsAssignableFrom(type));
foreach (var ti in all)
{
var t = ti.AsType();
if (t.Equals(typeof(IProfile)))
{
}
}
Run Code Online (Sandbox Code Playgroud)
嗨leen3o,如果您有外部程序集或插件,您可以通过从程序集列表中迭代来获取所有类型.在下面的代码"GlobalConfiguration.Modules"中包含我的插件列表
List<Type> typeToRegisters = new List<Type>();
foreach (var module in GlobalConfiguration.Modules)
{
typeToRegisters.AddRange(module.Assembly.DefinedTypes.Select(t => t.AsType()));
}
var entity-types = typeToRegisters.Where(x => x.GetTypeInfo().IsSubclassOf(typeof(IBaseDomainEntity)) && !x.GetTypeInfo().IsAbstract);
Run Code Online (Sandbox Code Playgroud)
这里"IBaseDomainEntity"是我正在寻找的界面.我唯一关心的是效率,我没有检查过
我可能找到了实现这一目标的方法,
var all =
Assembly
.GetEntryAssembly()
.GetReferencedAssemblies()
.Select(Assembly.Load)
.SelectMany(x => x.DefinedTypes)
.Where(type => typeof(ICloudProvider).IsAssignableFrom(type.AsType()));
foreach (var ti in all)
{
var t = ti.AsType();
if (!t.Equals(typeof(ICloudProvider)))
{
// do work
}
}
Run Code Online (Sandbox Code Playgroud)
我为Assembly.Load零件的成本感到担心,但是现在这可能会完成我的工作-因为我只需要实现的所有类的全限定名ICloudProvider。
| 归档时间: |
|
| 查看次数: |
7318 次 |
| 最近记录: |