Зарегистрируйте контроллер и контроллер API вместе в замке Виндзор - PullRequest
0 голосов
/ 02 мая 2020

У меня есть ASP. NET MVC приложение API, и я использую Castle Windsor Io c, я использую ApiController для операций CRUD и использую Controller для экспорта в Excel, я успешно регистрирую ApiController, но когда я хочу export Excel return error «Требуемый ресурс удален, имя изменено или временно недоступен». Я проверяю компонент регистра замка и вижу ExcelController. Спасибо за любые советы.

Фабрика контроллеров:

   public class WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IWindsorContainer _container;
    public static readonly Logger Logger = LogManager.GetCurrentClassLogger();

    public WindsorControllerFactory(IWindsorContainer container)
    {
        _container = container;
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            if (_container.Kernel.HasComponent(controllerType))
            {
                return (IController)_container.Resolve(controllerType);
            }

            return base.GetControllerInstance(requestContext, controllerType);
        }
        catch (Exception ex)
        {
            Logger.Error(ex.Message);
            throw new Exception("Not Found");
        }

    }

    public override void ReleaseController(IController controller)
    {
        //ServiceLocator.Current.Release(controller);
        base.ReleaseController(controller);
    }
}

Global.asax.cs:

 public class WebApiApplication : HttpApplication
{
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);

        var container =  BootstrapContainer.WireUp();

        ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

        GlobalConfiguration
            .Configuration
            .Services
            .Replace(typeof(IHttpControllerActivator)
            , new CastleApiControllerActivator(container));

    }

    protected void Application_Error()
    {
        var ex = Server.GetLastError();
        Logger.Error(ex);
    }

    protected void Application_End()
    {
        var ex = Server.GetLastError();
        Logger.Error(ex);
    }

}
...