C# 在运行时注册自定义控制器

C# 在运行时注册自定义控制器,c#,asp.net-mvc,dependency-injection,unity-container,C#,Asp.net Mvc,Dependency Injection,Unity Container,我有一些api控制器,我想在运行时在我的mvc应用程序中注册。 控制器本身驻留在类库项目中,如下所示: public class CustomController : ApiController { public string Get() { return "Hello"; } } 我编译了这个库(给它起了一个名字Injection.dll),在我的mvc应用程序中,尝试通过Unity.mvc库容器注册这些控制器 public static

我有一些api控制器,我想在运行时在我的mvc应用程序中注册。 控制器本身驻留在类库项目中,如下所示:

public class CustomController : ApiController
{
    public string Get()
    {
        return "Hello";
    }       
}
我编译了这个库(给它起了一个名字
Injection.dll
),在我的mvc应用程序中,尝试通过Unity.mvc库容器注册这些控制器

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // e.g. container.RegisterType<ITestService, TestService>();

        Assembly customLogicAssembly = Assembly.LoadFrom(HttpContext.Current.Server.MapPath("~/bin/" + "Injection.dll"));
        Type existingType = customLogicAssembly.GetTypes().First();
        container.RegisterType(existingType);

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
}
公共静态类UnityConfig
{
公共静态无效注册表组件()
{
var container=new UnityContainer();
//在此处向容器注册所有组件
//无需注册控制器
//例如container.RegisterType();
Assembly customLogicAssembly=Assembly.LoadFrom(HttpContext.Current.Server.MapPath(“~/bin/”+“Injection.dll”);
类型existingType=customLogicAssembly.GetTypes().First();
container.RegisterType(existingType);
SetResolver(新UnitedDependencyResolver(容器));
}
}
所以看起来注册工作正常,调试时没有错误,但是 我没有预期的结果,当我导航到api/Custom/Get时,我有一个
资源找不到。
浏览器中出现错误。
请帮我解决我在这里错过的问题。

MVC和Web API都有自己的依赖项解析程序

您的代码正在注册MVC依赖解析程序:

DependencyResolver.SetResolver(yourResolver);
您需要注册的是Web API依赖项解析器,如下所示:

GlobalConfiguration.Configuration.DependencyResolver = yourResolver;
在这两种情况下,预期的冲突解决程序都必须实现
idependencysolver
,但其用途不同

不建议您为这两件事共享相同的依赖项解析程序(因此容器和组合根)。如果需要,请使用
idependencysolver
的两个不同实例,并在它们所属的位置注册控制器

重要提示 有两个不同的
idependencysolver
接口,一个用于MVC,另一个用于Web API。它们具有相同的名称,但位于不同的名称空间中。并且您需要为每种情况实现适当的DI(或者,如果您需要为MVC和Web API实现DI,则两者都需要):


您是否配置了1。web api的路由?2.连接的自定义api控制器的unity控制器工厂?