Unity DI不在DI中工作 - 而是调用默认控制器构造函数

时间:2016-07-23 20:05:56

标签: c# asp.net-web-api dependency-injection unity-container

我正在尝试让Unity Container Dependency Injection在自托管的owin应用程序上运行。我已将Unity nuget包添加到我的项目中,并按如下方式设置了UnityConfig类:

#[doc(hidden)]

然后,我按照这样设置我的控制器:

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

在我的Startup类的Configuration()方法结束时调用UnityConfig.RegisterComponents()方法(在设置所有中间件之后)。当我访问此控制器的URL时,始终会调用无参数构造函数,因此永远不会解析IUserRepository的实例。

我错过了某种配置模式吗?任何信息都非常感谢。

1 个答案:

答案 0 :(得分:0)

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

我把它添加到我的启动类:

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