C# Unity DI在DI中不工作-改为调用默认控制器构造函数

C# Unity DI在DI中不工作-改为调用默认控制器构造函数,c#,asp.net-web-api,dependency-injection,unity-container,C#,Asp.net Web Api,Dependency Injection,Unity Container,我试图让Unity容器依赖注入在一个自托管的owin应用程序上工作。我已将Unity nuget包添加到我的项目中,并按如下方式设置了UnityConfig类: public static class UnityConfig { public static void RegisterComponents() { var container = new UnityContainer(); // register all your component

我试图让Unity容器依赖注入在一个自托管的owin应用程序上工作。我已将Unity nuget包添加到我的项目中,并按如下方式设置了UnityConfig类:

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>();

        container.RegisterType<IDBContext,UniversalCoatingsDbContext>();
        container.RegisterType<IUserRepository,UserRepository>();

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
    }
}
公共静态类UnityConfig
{
公共静态无效注册表组件()
{
var container=new UnityContainer();
//在此处向容器注册所有组件
//无需注册控制器
//例如container.RegisterType();
container.RegisterType();
container.RegisterType();
GlobalConfiguration.Configuration.DependencyResolver=新的UnityDependencyResolver(容器);
}
}
然后,我将控制器设置为:

public class UserController : ApiController
{
    private IUserRepository userRepo;

    public UserController() {
        Console.WriteLine("User controller default constructor");
    }

    //dependency injected value
    public UserController(IUserRepository repo)
    {
        this.userRepo = repo;
        Console.WriteLine("DI enabled constructor");
    }

    [HttpPost]
    public JsonResult<MessageResponse> Register(UnhashedUser unhashed_user)
    {
        MessageResponse response = new MessageResponse();
        if(ModelState.IsValid)
        {
            response = userRepo.createUser(unhashed_user);
        }
        else
        {
            response.message = "Invalid Request sent.";
        }

        return Json(response);

    }

}
公共类用户控制器:ApiController
{
私人IUSERREPO;
公共用户控制器(){
Console.WriteLine(“用户控制器默认构造函数”);
}
//依赖注入值
公共用户控制器(IUserRepository repo)
{
this.userRepo=repo;
Console.WriteLine(“启用DI的构造函数”);
}
[HttpPost]
公共JsonResult寄存器(UnhashedUser unhashed_用户)
{
MessageResponse=newmessageresponse();
if(ModelState.IsValid)
{
response=userRepo.createUser(unhashed_user);
}
其他的
{
response.message=“发送的请求无效。”;
}
返回Json(响应);
}
}
UnityConfig.RegisterComponents()方法在我的Startup类的Configuration()方法的末尾被调用(在所有中间件都设置好之后)。当我访问这个控制器的URL时,总是调用无参数构造函数,因此永远不会解析IUserRepository的实例


我是否缺少某种配置模式?非常感谢您提供的任何信息。

我修改了UnityConfig类,将容器作为静态变量公开。然后呢,

我将此添加到我的startup类中:

        //set up dependency injection
        UnityConfig.RegisterComponents();
        config.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(UnityConfig.container);
        app.UseWebApi(config);

尝试删除默认构造函数如果我得到一个“无默认构造函数”例外以使其私有化是否确实设置了正确的
依赖解析程序
?看看这个:将默认构造函数设为私有并没有什么区别(它仍然会被调用。我知道,因为它中的Console.WriteLine()语句正在执行。