如何定义多个部分 Owin Startup 类 并让它们全部 运行 他们的代码
How to define multiple partial Owin Startup classes and have them all run their code
我正在开发一个具有 "plugin" 架构的 MVC 应用程序。
基本上会有一个主"host"项目,会在运行时间动态加载其他项目。
我们想将所有 ASP.NET 与身份相关的内容移动到它自己的独立插件项目中。
主要宿主项目已经包含一个 Owin Startup class,它具有一些需要 运行 的逻辑。但是,我们还需要在 Identity 插件项目中创建一个 Owin Startup class,以便我们可以调用 ConfigureAuth()。
我怎样才能做到这一点?
MvcPluginHost.Web Startup.cs
[assembly: OwinStartupAttribute(typeof(MvcPluginHost.Web.Startup))]
namespace MvcPluginHost.Web
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
MvcPluginHost.Plugins.IdentityPlugin Startup.cs
[assembly: OwinStartupAttribute(typeof(MvcPluginHost.Plugins.IdentityPlugin.Startup))]
namespace MvcPluginHost.Plugins.IdentityPlugin
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
}
部分 类 不是为了这个,首先想到的是查询所需的程序集以获得某些接口并在所有接口上调用通用方法。
var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
foreach(var implementation in types)
{
var obj = (IMyInterface)Activator.CreateInstance(implementation);
obj.RunPlugin() //Interface method you're trying to implement in partials
}
我正在开发一个具有 "plugin" 架构的 MVC 应用程序。
基本上会有一个主"host"项目,会在运行时间动态加载其他项目。
我们想将所有 ASP.NET 与身份相关的内容移动到它自己的独立插件项目中。
主要宿主项目已经包含一个 Owin Startup class,它具有一些需要 运行 的逻辑。但是,我们还需要在 Identity 插件项目中创建一个 Owin Startup class,以便我们可以调用 ConfigureAuth()。
我怎样才能做到这一点?
MvcPluginHost.Web Startup.cs
[assembly: OwinStartupAttribute(typeof(MvcPluginHost.Web.Startup))]
namespace MvcPluginHost.Web
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
MvcPluginHost.Plugins.IdentityPlugin Startup.cs
[assembly: OwinStartupAttribute(typeof(MvcPluginHost.Plugins.IdentityPlugin.Startup))]
namespace MvcPluginHost.Plugins.IdentityPlugin
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
}
部分 类 不是为了这个,首先想到的是查询所需的程序集以获得某些接口并在所有接口上调用通用方法。
var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
foreach(var implementation in types)
{
var obj = (IMyInterface)Activator.CreateInstance(implementation);
obj.RunPlugin() //Interface method you're trying to implement in partials
}