是否不可能有多个OwinStartup属性?

时间:2013-09-28 12:08:39

标签: owin

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

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

我有什么方法可以说我的创业公司是最重要的,以便能够超越所有其他公司?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

我知道这已经老了,但我最近遇到了这个问题,这就是我解决它的方法。我有一个使用这个OwinStartup方法的第三方库,但我也需要它来映射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代替