У меня есть набор библиотек классов, разработанных с использованием .Net Standard 2.0. Одна из этих библиотек классов реализует интерфейс IAuthorizationFilter
, который находится в пространстве имен Microsoft.AspNetCore.Mvc.Filters
.
public class AuthorizationFilter : IAuthorizationFilter
{
public AuthorizationFilter() {}
public void OnAuthorization(AuthorizationFilterContext context)
{/*Code cropped for the case of simplicity*/}
}
Основная обязанность другой библиотеки классов — зарегистрировать конфигурацию внедрения зависимостей.
public static class ServiceCollectionExtensions
{
public static IServiceCollection MyCustomConfigure(this IServiceCollection services)
{
//...Code cropped for the case of simplicity
services.AddMvc(config => { config.Filters.Add(typeof(AuthorizationFilter)); });
return services;
}
}
Помимо этих библиотек классов .Net Standard, у меня есть проект веб-приложения, разработанный с использованием ASP.Net MVC
(.Net Framework 4.7)
У меня есть две основные проблемы:
FilterAttribute
в список фильтров ASP.Net MVC's
, который выдает исключение, говорящее:The given filter instance must implement one or more of the following filter interfaces: System.Web.Mvc.IAuthorizationFilter, System.Web.Mvc.IActionFilter, System.Web.Mvc.IResultFilter, System.Web.Mvc.IExceptionFilter, System.Web.Mvc.Filters.IAuthenticationFilter.
Я зарегистрировал фильтр таким образом в своем приложении ASP.Net MVC:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//...Code cropped for the case of simplicity
filters.Add(typeof(AuthorizationFilter));
}
}
видимо, я не хочу добавлять ссылку на System.Web
в свои библиотеки классов .Net Standard, с другой стороны, я не знаю, как решить эту проблему!
Вторая проблема — это место, где я могу вызвать свой метод services.MyCustomConfigure()
. В приложениях .Net Core я вызывал этот метод внутри метода ConfigureServices
в классе Startup
, но я не знаю, как это вызвать в ASP.Net MVC
!
public class Startup
{
//...Code cropped for the case of simplicity
public void ConfigureServices(IServiceCollection services)
{
services.MyCustomConfigure()
}
}
ASP.NET (WebForms, MVC, WebAPI) и ASP.NET Core — это разные платформы, и хотя они имеют схожие концепции (например, атрибуты фильтра), они разные, и вы не можете использовать компоненты, написанные для ASP.NET Core, используя его API (Microsoft.AspNetCore.*
) для классического ASP.NET.
Это означает, что вам потребуются разные реализации для ASP.NET Core и ASP.NET MVC 5.
Именно, они присущи классам, известным только ASP.NET Core.
Спасибо. это означает, что даже я не могу получить доступ к зарегистрированным типам (зарегистрированным IServiceProvider) в ASP.Net MVC?