1

我在我的 ASP.NET Web Api 2 项目中使用 Ninject 进行依赖注入。一切都通过 Visual Studio 和 IIS Express 在本地完美运行,但是当我部署到 IIS 时,依赖关系没有得到解决。下面是我的 Startup.cs

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var webApiConfiguration = new HttpConfiguration();
        webApiConfiguration.EnableCors();
        webApiConfiguration.SuppressDefaultHostAuthentication();
        webApiConfiguration.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        webApiConfiguration.MapHttpAttributeRoutes();

        app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(webApiConfiguration);

        ConfigureAuth(app);

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Welcome to Web API");
        });
    }

    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
        kernel.Load(new CourseModule(), new DataPullModule(), new DegreeModule(), new ResponseModule(), new RestSharpModule());

        return kernel;
    }
}

我在尝试访问我的一个控制器时遇到的错误如下:

尝试创建“DegreeController”类型的控制器时发生错误。确保控制器有一个无参数的公共构造函数。

这是我的 DegreeController 构造函数:

    public DegreeController(IDegreeMapper degreeMapper, IDegreeRepository degreeRepository)
    {
        _degreeMapper = degreeMapper;
        _degreeRepository = degreeRepository;
    }

这是我将接口绑定到类的 DegreeModule。

public class DegreeModule : NinjectModule
{
    public override void Load()
    {
        Bind<IDegreeController>().To<DegreeController>().InRequestScope();
        Bind<IDegreeMapper>().To<DegreeMapper>().InRequestScope();
        Bind<IDegreeRepository>().To<DegreeRepository>().InRequestScope();
        Bind<IDegreeRatingCalculator>().To<DegreeRatingCalculator>().InRequestScope();
    }
}
4

1 回答 1

1
var kernel = CreateKernel();
app.UseNinjectMiddleware(() => kernel).UseNinjectWebApi(configuration);
于 2016-11-07T10:36:27.250 回答