查找所有派生自类型的 类 并激活该类型
Find all classes that derive from type and activate that type
我已经看过一些类似的答案,但我无法让它工作。
我正在尝试使以下内容更易于维护:
var modules = new INinjectModule[]
{
new ServiceModule(),
new ApplicationSettingsModule(),
new SerializerModule(),
new LoggerModule(),
new SqliteModule(),
new SetupModule(),
new CacheModule(),
new AuthenticationModule(),
};
每次我添加一个新的NinjectModule
我需要修改这个数组来包含它。
我希望能够找到从 NinjectModule
派生的所有类型并激活它们并将它们全部放入一个集合中。
这是我尝试过的方法,但我没有得到任何源自 NinjectModule
的 类
var classes = (from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in domainAssembly.GetTypes()
where typeof(NinjectModule).IsAssignableFrom(assemblyType)
select assemblyType).ToArray();
请注意,我要查找的 类 在不同的程序集中...
已修复。
我用了Assembly.Load()
:
var result = Assembly.Load("NZBDash.DependencyResolver.Modules").GetTypes()
.Where(a =>
a.IsClass &&
a.BaseType == typeof(NinjectModule))
.ToArray();
我建议你像那样使用内核,所以 Ninject 会处理 NinjectModules
:
public static IKernel ConfigureKernel(IKernel kernel)
{
kernel.Load(Assembly.Load("NZBDash.DependencyResolver.Modules"));
return kernel;
}
我已经看过一些类似的答案,但我无法让它工作。
我正在尝试使以下内容更易于维护:
var modules = new INinjectModule[]
{
new ServiceModule(),
new ApplicationSettingsModule(),
new SerializerModule(),
new LoggerModule(),
new SqliteModule(),
new SetupModule(),
new CacheModule(),
new AuthenticationModule(),
};
每次我添加一个新的NinjectModule
我需要修改这个数组来包含它。
我希望能够找到从 NinjectModule
派生的所有类型并激活它们并将它们全部放入一个集合中。
这是我尝试过的方法,但我没有得到任何源自 NinjectModule
var classes = (from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in domainAssembly.GetTypes()
where typeof(NinjectModule).IsAssignableFrom(assemblyType)
select assemblyType).ToArray();
请注意,我要查找的 类 在不同的程序集中...
已修复。
我用了Assembly.Load()
:
var result = Assembly.Load("NZBDash.DependencyResolver.Modules").GetTypes()
.Where(a =>
a.IsClass &&
a.BaseType == typeof(NinjectModule))
.ToArray();
我建议你像那样使用内核,所以 Ninject 会处理 NinjectModules
:
public static IKernel ConfigureKernel(IKernel kernel)
{
kernel.Load(Assembly.Load("NZBDash.DependencyResolver.Modules"));
return kernel;
}