我正在使用带有MEF framework的Asp.net MVC 5应用程序,允许我将MVC应用程序设计为主应用程序中的插件。
我需要一个我的插件之一需要拥有自己的OwinStart
up类,该类在属于我的主应用程序的主Owin类之后运行。
换句话说,main.dll
有Startup
类,它总是需要先运行,然后plugin.dll
有一个Startup
类,需要运行第二个。
是否可以拥有2个自己的启动类?
从Docs about detecting StartUp类
OwinStartup
属性会覆盖命名约定。您可以 也可以使用a指定具有此属性的友好名称 友好名称要求您也使用中的appSetting
元素 配置文件。
所以我尝试添加一个像这样的友好名称
[assembly: OwinStartup("pluginStartup", typeof(plugin.Startup))]
在配置文件中添加了以下内容
<appSettings>
<add key="owin:appStartup" value="Main.Startup, Main" />
</appSettings>
但是这不会归档我的Plugin.Startup
只会运行Main.Startup
。
有没有办法运行两个不同的Startup
类?
https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-startup-class-detection
答案 0 :(得分:2)
似乎无法运行多个启动文件。
但是,我用反射来完成工作。基本上,我搜索实现IAppConfiguration
接口的任何类的所有程序集,然后在该实例上调用Configuration
。
我是这样做的。
我创建了一个界面
public interface IAppConfiguration
{
void Configuration(IAppBuilder app);
}
然后在我的main.dll
中,我将以下代码添加到我的Startup
课程中。
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
ConfigurePlugins(app);
}
private static void ConfigurePlugins(IAppBuilder app)
{
try
{
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var startups = assembly.GetTypes().Where(x => x.IsClass && typeof(IAppConfiguration ).IsAssignableFrom(x)).ToList();
foreach (Type startup in startups)
{
var config = (IAppConfiguration )Activator.CreateInstance(startup);
config.Configuration(app);
}
}
}
catch
{
}
}