C# Can';t创建控制器,依赖项注入

C# Can';t创建控制器,依赖项注入,c#,asp.net-mvc,dependency-injection,C#,Asp.net Mvc,Dependency Injection,我有以下启动文件(Startup.cs): 如您所见,我注册了autofac配置。我的autofac config的代码如下所示:(AutofacConfig.cs) 堆栈跟踪: 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor控制器描述符,类型 控制器类型)在 System.Web.Http.Controllers.H

我有以下启动文件(Startup.cs):

如您所见,我注册了autofac配置。我的autofac config的代码如下所示:(AutofacConfig.cs)

堆栈跟踪:

在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor控制器描述符,类型 控制器类型)在 System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage (请求)在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u15.MoveNext() at System.Linq.Expressions.Expression.New(Type)at System.Web.Http.Internal.TypeActivator.Create[TBase](类型 instanceType)在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceActivator(HttpRequestMessage 请求,类型controllerType,Func`1和activator)位于 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor控制器描述符,类型 控制器类型)


我将Oauth与OWIN一起使用,我不知道它是autofac在基于OWIN的应用程序中的特殊实现

我的startup.cs看起来像这样,它可以工作:

public void Configuration(IAppBuilder app)
    {
        var builder = new ContainerBuilder();


        //AutofacConfig.RegisterIoc();
        HttpConfiguration config = new HttpConfiguration();

        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
        var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("API")).ToArray();
        builder.RegisterAssemblyTypes(assemblies)
            .AsImplementedInterfaces()
            .InstancePerRequest();

        var container = builder.Build();
        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

        ConfigureOAuth(app); //This must come first before we load the WebApiConfig below.

        WebApiConfig.Register(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        app.UseAutofacMiddleware(container);
        app.UseAutofacWebApi(config);
        app.UseWebApi(config);

    }
public void配置(IAppBuilder应用程序)
{
var builder=new ContainerBuilder();
//AutofacConfig.RegisterIoc();
HttpConfiguration config=新的HttpConfiguration();
RegisterAppController(Assembly.getExecutionGassembly());
var assemblies=BuildManager.getReferencedAssemblys().Cast


它说您需要一个无参数的公共构造函数。您需要
public DataController(){…}
。我缺少什么吗?您必须在container
container.RegisterType()上注册服务
你的IOC注册在哪里?@Div:No.我没有这样做,而是写var assemblies=BuildManager.getReferenceAssemblys().Cast().Where(x=>x.FullName.Contains(“API”).ToArray();builder.RegisterAssemblyTypes(assemblies).AsImplementedInterfaces().InstancePerRequest();@Progressive:它们在我的autfacconfig.cs中
 public class AutofacConfig
    {
        public static void RegisterIoc()
        {
            var builder = GetBuilder();
            var container = builder.Build();

            // Set dependency resolver for MVC
            //DependencyResolver.SetResolver(new AutofacWebApiDependencyResolver(container));

            // Set dependency resolver for Web API
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }

        public static ContainerBuilder GetBuilder()
        {
            var builder = new ContainerBuilder();
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            //builder.RegisterFilterProvider();


            var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("API")).ToArray();
            builder.RegisterAssemblyTypes(assemblies)
                .AsImplementedInterfaces()
                .InstancePerRequest();

            return builder;
        }
    }
private readonly IItemModelService _itemModelService;

public DataController(IItemModelService itemModelService)
{
    this._itemModelService = itemModelService;
}
public void Configuration(IAppBuilder app)
    {
        var builder = new ContainerBuilder();


        //AutofacConfig.RegisterIoc();
        HttpConfiguration config = new HttpConfiguration();

        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
        var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("API")).ToArray();
        builder.RegisterAssemblyTypes(assemblies)
            .AsImplementedInterfaces()
            .InstancePerRequest();

        var container = builder.Build();
        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

        ConfigureOAuth(app); //This must come first before we load the WebApiConfig below.

        WebApiConfig.Register(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        app.UseAutofacMiddleware(container);
        app.UseAutofacWebApi(config);
        app.UseWebApi(config);

    }