Não é possível resolver um controlador que foi carregado a partir da dll externa

Eu estou construindo uma API da Web usando MVC4 Web API com um contêiner IoC (Injector simples, neste caso, mas eu não acho que esse problema está relacionado a esse contêiner) que deve expor uma variedade de CRUD e operações de consulta. A razão para usar o COI no meu caso é que somos uma loja de desenvolvedores e precisamos permitir que os clientes criem seus próprios controladores de API da Web para expor os dados de que precisam para expor as necessidades do nosso sistema. Conseqüentemente, eu esperava projetar minha solução de uma forma que permitisse alimentar meu próprio produto, tornando todos os controladores, tanto nossos quanto de nossos clientes, externos e carregáveis ​​através do COI.

O site não tem qualquer referência à biblioteca, mas a biblioteca contém controladores que eu quero usar no site. Os tipos são registrados no contêiner e o DependencyResolver é definido como o resolvedor de dependência personalizado. Eu tenho o código de encontrar o plugin dll e carregar o tipo de controlador, mas quando eu tento navegar para a rota que representaria diz que não pode encontrá-lo.

ou seja, se eu tentar navegar para / api / Test1Api, eu devo ver o texto "hello world"

Meu problema aqui é que, embora eu tenha carregado meu tipo de controlador, não consigo traduzir isso em uma rota que o site diz estar lá.

Eu recebo o erro

Não foi encontrado nenhum recurso HTTP que corresponda ao URI do pedido

Nenhum tipo foi encontrado que corresponda ao controlador chamado 'Test1Api'.

Aqui está como eu registro o contêiner

public static class SimpleInjectorInitializer
{
    /// <summary>Initialize the container and register it as MVC3 Dependency Resolver.</summary>
    public static void Initialize()
    {
        //// Did you know the container can diagnose your configuration? Go to: http://bit.ly/YE8OJj.

        // Create the IOC container.
        var container = new Container();

        InitializeContainer(container);

        container.RegisterMvcAttributeFilterProvider();
        // Verify the container configuration
        container.Verify();

        // Register the dependency resolver.
        GlobalConfiguration.Configuration.DependencyResolver =
                    new SimpleInjectorWebApiDependencyResolver(container);
    }

    private static void InitializeContainer(Container container)
    {
        var appPath = AppDomain.CurrentDomain.BaseDirectory;

        string[] files = Directory.GetFiles(appPath + "\\bin\\Plugins", "*.dll",
            SearchOption.AllDirectories);
        var assemblies = files.Select(Assembly.LoadFile);

        // register Web API controllers
        var apiControllerTypes =
            from assembly in assemblies
            where !assembly.IsDynamic
            from type in assembly.GetExportedTypes()
            where typeof(IHttpController).IsAssignableFrom(type)
            where !type.IsAbstract
            where !type.IsGenericTypeDefinition
            where type.Name.EndsWith("Controller", StringComparison.Ordinal)
            select type;

        // register MVC controllers
        var mvcControllerTypes =
            from assembly in assemblies
            where !assembly.IsDynamic
            from type in assembly.GetExportedTypes()
            where typeof(IController).IsAssignableFrom(type)
            where !type.IsAbstract
            where !type.IsGenericTypeDefinition
            where type.Name.EndsWith("Controller", StringComparison.Ordinal)
            select type;

        foreach (var controllerType in apiControllerTypes)
        {
            container.Register(controllerType);
        }

        foreach (var controllerType in mvcControllerTypes)
        {
            container.Register(controllerType);
        }
    }
}

Qualquer ajuda é apreciada.

questionAnswers(2)

yourAnswerToTheQuestion