Asp.net mvc 4 使用StructureMap的Web API和MVC 4控制器中的问题

Asp.net mvc 4 使用StructureMap的Web API和MVC 4控制器中的问题,asp.net-mvc-4,asp.net-web-api,structuremap,Asp.net Mvc 4,Asp.net Web Api,Structuremap,我启动了一个WebAPI项目,并将其扩展为一个普通的MVC项目。我的意思是,我有一些来自ApiController的控制器,还有一些来自Controller 这是我的依赖解析程序: public class StructureMapDependencyResolver :IDependencyResolver { public IDependencyScope BeginScope() { return this; } public Struct

我启动了一个WebAPI项目,并将其扩展为一个普通的MVC项目。我的意思是,我有一些来自
ApiController
的控制器,还有一些来自
Controller

这是我的依赖解析程序:

public class StructureMapDependencyResolver :IDependencyResolver
{
    public IDependencyScope BeginScope()
    {
        return this;
    }

    public StructureMapDependencyResolver(IContainer container)
    {
        _container = container;
    }

    public object GetService(Type serviceType)
    {
        if (serviceType.IsAbstract || serviceType.IsInterface)
            return _container.TryGetInstance(serviceType);

        return _container.GetInstance(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _container.GetAllInstances<object>()
                         .Where(s => s.GetType() == serviceType);
    }

    private readonly IContainer _container;

    public void Dispose() { }
}
公共类结构MapDependencyResolver:IDependencyResolver
{
公共IDependencyScope BeginScope()
{
归还这个;
}
公共结构MapDependencyResolver(IContainer容器)
{
_容器=容器;
}
公共对象GetService(类型serviceType)
{
if(serviceType.IsAbstract | | serviceType.IsInterface)
返回_container.TryGetInstance(服务类型);
return\u container.GetInstance(serviceType);
}
公共IEnumerable GetServices(类型serviceType)
{
return _container.GetAllInstances()
。其中(s=>s.GetType()==serviceType);
}
专用只读IContainer\u容器;
public void Dispose(){}
}
这是我的Global.asax.cs:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    ObjectFactory.Initialize(x =>
        {
            x.For<IDataService>().Use<MockDataService>();
        });
    ObjectFactory.Configure(x => x.Scan(scan =>
        {
            scan.AssembliesFromApplicationBaseDirectory();
            scan.LookForRegistries();
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
        }));

    var container = ObjectFactory.Container;
    GlobalConfiguration.Configuration.DependencyResolver = 
               new StructureMapDependencyResolver(container);
}
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ObjectFactory.Initialize(x=>
{
x、 For().Use();
});
ObjectFactory.Configure(x=>x.Scan(Scan=>
{
scan.AssembliesFromApplicationBaseDirectory();
scan.LookForRegistries();
扫描。卡入总成();
scan.WithDefaultConventions();
}));
var container=ObjectFactory.container;
GlobalConfiguration.Configuration.DependencyResolver=
新结构MapDependencyResolver(容器);
}
Web API控制器工作得很好,但我无法让构造函数注入在
控制器
派生的控制器中工作。这是通常的
没有为这个对象定义的无参数构造函数
错误消息

我在这里有点不知所措。。。这是我第一次尝试Web API,所以我不确定我会错在哪里。

您需要调用到MVC IOC容器的。确保您的容器也实现了MVC的IDependencyResolver,否则它将无法用于MVC