从 Owin Startup.Configuration 中删除 Global.asax 和 运行 EPiServer CMS MVC
Remove Global.asax and Run EPiServer CMS MVC from Owin Startup.Configuration
我需要编写一些自定义中间件才能与 EPiServer CMS 一起使用。我想从 StartUp.Configuration()
中删除 Application_Start() 和 运行 所有内容
这对于基线 MVC 4 应用程序似乎是可行的,因为您可以通过调用 Configuration() 中的方法来注册路由并执行所有必要的启动任务。
但是,EPiServer 的注册路由等方法受到保护(我不知道所有必要的方法)。我预计通过 运行 使用 Startup 而不是 [=] 启动应用程序会带来以下好处38=]
- 如果我可以控制何时初始化模块 运行,那么我可以在我的自定义中间件中使用服务定位器 (ServiceLocator)
我通过不为同一个应用程序设置两个应用程序起点来降低复杂性
这些对我来说都很重要。除非绝对必要,否则我宁愿不使用 Application_Start()。
我的研究揭示了使用 EPiServer.ServiceAPi 执行此操作的一种潜在方法 - 但 ServiceApi 的核心目的不会在我的应用程序中使用。纯粹为了 OWIN 兼容性而引入它似乎很浪费。它还具有 OAuth 提供程序依赖项,我此时不希望填写它,因为我的应用程序不需要它。有没有人成功地做到了这一点?任何人都可以提供指导吗?感谢您抽出宝贵时间,我很乐意在必要时对我的问题进行澄清。谢谢
以下是代码片段:
请注意第一个上的名称空间 - 似乎继承了一些功能然后 运行 典型的 ASP.NET MVC 东西。
public class EPiServerApplication : EPiServer.Global
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
这里是典型的 OWIN 启动配置。我想删除上面的内容,只使用下面的内容。可以吗?
public class Startup
{
public void Configuration(IAppBuilder app)
{
AreaRegistration.RegisterAllAreas();
new EPiServer.ServiceApi.Startup().Configuration(app);
app.Use(typeof(CustomMiddleware));
}
}
我建议查看 InitializableModule
在 Episerver 启动时 运行 的事情:
[InitializableModule]
[ModuleDependency((typeof(EPiServer.Web.InitializationModule)))]
public class MyInitializationModule : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
// Your code here
}
public void Uninitialize(InitializationEngine context)
{
}
}
ModuleDependency
属性用于指定在执行您的代码之前必须加载另一个初始化模块。例如,对 EPiServer.Web.InitializationModule
的依赖可确保您可以调用 Episerver API 来处理代码中的内容。
我需要编写一些自定义中间件才能与 EPiServer CMS 一起使用。我想从 StartUp.Configuration()
中删除 Application_Start() 和 运行 所有内容这对于基线 MVC 4 应用程序似乎是可行的,因为您可以通过调用 Configuration() 中的方法来注册路由并执行所有必要的启动任务。
但是,EPiServer 的注册路由等方法受到保护(我不知道所有必要的方法)。我预计通过 运行 使用 Startup 而不是 [=] 启动应用程序会带来以下好处38=]
- 如果我可以控制何时初始化模块 运行,那么我可以在我的自定义中间件中使用服务定位器 (ServiceLocator)
我通过不为同一个应用程序设置两个应用程序起点来降低复杂性
这些对我来说都很重要。除非绝对必要,否则我宁愿不使用 Application_Start()。
我的研究揭示了使用 EPiServer.ServiceAPi 执行此操作的一种潜在方法 - 但 ServiceApi 的核心目的不会在我的应用程序中使用。纯粹为了 OWIN 兼容性而引入它似乎很浪费。它还具有 OAuth 提供程序依赖项,我此时不希望填写它,因为我的应用程序不需要它。有没有人成功地做到了这一点?任何人都可以提供指导吗?感谢您抽出宝贵时间,我很乐意在必要时对我的问题进行澄清。谢谢
以下是代码片段: 请注意第一个上的名称空间 - 似乎继承了一些功能然后 运行 典型的 ASP.NET MVC 东西。
public class EPiServerApplication : EPiServer.Global { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); var formatters = GlobalConfiguration.Configuration.Formatters; var jsonFormatter = formatters.JsonFormatter; var settings = jsonFormatter.SerializerSettings; settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); GlobalConfiguration.Configuration.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
这里是典型的 OWIN 启动配置。我想删除上面的内容,只使用下面的内容。可以吗?
public class Startup
{
public void Configuration(IAppBuilder app)
{
AreaRegistration.RegisterAllAreas();
new EPiServer.ServiceApi.Startup().Configuration(app);
app.Use(typeof(CustomMiddleware));
}
}
我建议查看 InitializableModule
在 Episerver 启动时 运行 的事情:
[InitializableModule]
[ModuleDependency((typeof(EPiServer.Web.InitializationModule)))]
public class MyInitializationModule : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
// Your code here
}
public void Uninitialize(InitializationEngine context)
{
}
}
ModuleDependency
属性用于指定在执行您的代码之前必须加载另一个初始化模块。例如,对 EPiServer.Web.InitializationModule
的依赖可确保您可以调用 Episerver API 来处理代码中的内容。