Использовать стандартную библиотеку .Net в приложении .Net Framework 4.7 - PullRequest
1 голос
/ 21 мая 2019

У меня есть набор библиотек классов, которые разработаны с использованием .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)

У меня есть две основные проблемы:

  1. Мне нужно добавить свой класс FilterAttribute в список фильтров ASP.Net MVC's, который выдает исключение:

Данный экземпляр фильтра должен реализовывать одно или несколько из следующих интерфейсы фильтров: 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, с другой стороны, я не знаю, как решить эту проблему!

  1. Вторая проблема - это место, где я могу вызвать мой 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()
        }
    }
    

1 Ответ

4 голосов
/ 21 мая 2019

ASP.NET (WebForms, MVC, WebAPI) и ASP.NET Core являются разными средами, и, хотя они имеют общие концепции (например, атрибуты фильтра), они разные, и вы не можете использовать компоненты, написанные для ASP.NET Core, используя его API(Microsoft.AspNetCore.*) для классического ASP.NET.

Это означает, что вам понадобятся разные реализации для ASP.NET Core и ASP.NET MVC 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...