Использование перехватчика для контроллера asp.net с использованием простого инжектора - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь добавить перехватчик для всех моих контроллеров. Я использую Simple Injector и asp.net MVC.

При попытке этого примера: https://simpleinjector.readthedocs.io/en/latest/InterceptionExtensions.html все работало, когда я хотел добавить перехватчик в интерфейс. Проблема начинается с контроллеров, поскольку они имеют конкретный тип, а не интерфейсы ...

private static void ThrowIfServiceTypeNotInterface(ExpressionBuiltEventArgs e)  {
    // NOTE: We can only handle interfaces, because
    // System.Runtime.Remoting.Proxies.RealProxy only supports interfaces.
    if (!e.RegisteredServiceType.IsInterface) {
        throw new NotSupportedException("Can't intercept type " +
                    e.RegisteredServiceType.Name + " because it is not an interface.");
    }
}

В приведенной выше реализации есть явное ограничение только для интерфейсов, хотелось бы понять, почему?

Кто-нибудь имеет опыт добавления перехватчиков в SimpleInjector для контроллеров / конкретных типов?

1 Ответ

1 голос
/ 19 марта 2019

В приведенной выше реализации есть явное ограничение только для интерфейсов, я хотел бы понять, почему?

Ну, комментарий уже отвечает на этот вопрос:

// NOTE: We can only handle interfaces, because
// System.Runtime.Remoting.Proxies.RealProxy only supports interfaces.

Чтобы иметь возможность применять перехват, вы должны убедиться, что контроллеры разрешены интерфейсом IController.Как это сделать, вы найдете в следующем документе: Как украсить контроллер ASP.NET MVC с помощью простого инжектора .

...