10

在多个包可能提供 owin 启动属性的 CMS 中,有没有办法创建多个启动类?

如果不是,我将不得不创建一个启动类,包创建者可以在其中注册他们的 owin 启动类,并且 cms 启动类将负责运行这些。但是,如果包中的某个人输入了启动属性,则可能是他运行而不是 cms 启动。

有什么方法可以告诉我我的创业公司是最重要的,这样才能超越所有其他公司?

4

2 回答 2

8

您可以在一个应用程序中有多个启动类,并指示运行时选择其中之一。可以使用不同的友好名称声明多个 Owinstartup 属性,并使用 appSetting owin:AppStartup 传入要使用的相应 Startup 类的友好名称。是有关如何拥有多个启动属性的详细文档。

于 2013-09-29T02:55:22.817 回答
2

我知道这很旧,但我最近遇到了这个问题,这就是我解决它的方法。我有一个使用此 OwinStartup 方法的 3rd 方库,但我还需要它来映射 SignalR 路由。所以我简单地创建了一个启动类,它遍历所有加载的程序集并找到启动类并调用它们

[assembly: OwinStartupAttribute(typeof(TestWeb.Startup))]
namespace TestWeb
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            foreach (Assembly startupAssembly in System.AppDomain.CurrentDomain.GetAssemblies().Where(assembly => assembly.GetCustomAttribute<OwinStartupAttribute>() != null))
            {
                OwinStartupAttribute startupAttribute = startupAssembly.GetCustomAttribute<OwinStartupAttribute>();
                if (startupAttribute.StartupType != typeof(TestWeb.Startup))
                {
                    object startupClass = Activator.CreateInstance(startupAttribute.StartupType);
                    string startupMethod = string.IsNullOrEmpty(startupAttribute.MethodName) ? "Configuration" : startupAttribute.MethodName;

                    startupAttribute.StartupType.GetMethod(startupMethod).Invoke(startupClass, new object[] { app });
                }
            }
        }
    }
}

但是,如果您不需要 IAppBuilder 实例,则可以改用WebActivatorEx

于 2016-11-18T10:28:52.277 回答