Не удается разрешить контроллер, который был загружен из внешней библиотеки DLL
Я создаю веб-API с использованием MVC4 Web API с контейнером IoC (в данном случае Simple Injector, но я неЯ думаю, что эта проблема связана с этим контейнером, который должен предоставлять различные операции CRUD и запросов. Причиной использования IOC в моем случае является то, что мы являемся разработчиком, и мне нужно иметь возможность позволить клиентам создавать свои собственные контроллеры веб-API для предоставления данных, которые им необходимы для представления потребностей нашей системы. Следовательно, я надеялся спроектировать свое решение таким образом, чтобы я смог соблазнить свой собственный продукт, сделав все контроллеры, как наши, так и наших клиентов ", внешний и загружаемый через МОК.
На сайте нет ссылок на библиотеку, но библиотека содержит контроллеры, которые я хочу использовать на сайте. Типы регистрируются в контейнере, а для DependencyResolver устанавливается настраиваемый преобразователь зависимостей. У меня есть код, который находит плагин dll и загружает тип контроллера, но когда я пытаюсь перейти к маршруту, который он представляет, он говорит, что может 'не могу найти это.
т.е. если я пытаюсь перейти к / api / Test1Api, я должен увидеть текст "Привет, мир"
Моя проблема здесь в том, что, хотя я загрузил свой тип контроллера, я не могу перевести это в маршрут, который, как говорит веб-сайт, есть.
Я получаю ошибку
Не найден ресурс HTTP, соответствующий URI запроса
Не найден тип, соответствующий контроллеру с именем 'Test1Api.
Вот как я регистрирую контейнер
public static class SimpleInjectorInitializer
{
/// Initialize the container and register it as MVC3 Dependency Resolver.
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);
}
}
}
Любая помощь приветствуется.