Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用Unity错误在ASP.NET Web API中进行依赖项注入_Asp.net Mvc_Asp.net Mvc 4_Dependency Injection_Asp.net Web Api_Unity Container - Fatal编程技术网

Asp.net mvc 使用Unity错误在ASP.NET Web API中进行依赖项注入

Asp.net mvc 使用Unity错误在ASP.NET Web API中进行依赖项注入,asp.net-mvc,asp.net-mvc-4,dependency-injection,asp.net-web-api,unity-container,Asp.net Mvc,Asp.net Mvc 4,Dependency Injection,Asp.net Web Api,Unity Container,我试图按照Unity实现依赖注入,但我在boostrapper.cs(我使用Unity.MVC4库)中遇到了一个错误。有人能告诉我我缺少什么吗 错误:IoCContainer不存在 似乎实施 Microsoft.Practices.ServiceLocation.IServiceLocator。参数名称: 公共服务提供者 这是IoCContainer类 public class ScopeContainer : IDependencyScope { protected I

我试图按照Unity实现依赖注入,但我在boostrapper.cs(我使用Unity.MVC4库)中遇到了一个错误。有人能告诉我我缺少什么吗

错误:IoCContainer不存在 似乎实施 Microsoft.Practices.ServiceLocation.IServiceLocator。参数名称: 公共服务提供者

这是IoCContainer类

public class ScopeContainer : IDependencyScope
    {
        protected IUnityContainer container;

        public ScopeContainer(IUnityContainer container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            this.container = container;
        }

        public object GetService(Type serviceType)
        {
            if (container.IsRegistered(serviceType))
            {
                return container.Resolve(serviceType);
            }
            else
            {
                return null;
            }
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            if (container.IsRegistered(serviceType))
            {
                return container.ResolveAll(serviceType);
            }
            else
            {
                return new List<object>();
            }
        }

        public void Dispose()
        {
            container.Dispose();
        }
    }

    class IoCContainer : ScopeContainer, IDependencyResolver
    {
        public IoCContainer(IUnityContainer container)
            : base(container)
        {
        }

        public IDependencyScope BeginScope()
        {
            var child = container.CreateChildContainer();
            return new ScopeContainer(child);
        }
    }
我也有一种感觉,它可能与路由有关,我实际上在配置中添加了经典的MVC路由,因为我读到webapi和MVC使用不同的“激活器”之类的东西

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
              name: "RestApi",
              routeTemplate: "api/{controller}/{action}/{id}",
              defaults: new { id = RouteParameter.Optional }
            );

找到了答案,看起来博客已经过时了,因为我甚至不需要创建IoCContainer,因为我只需要安装
Unity.WebAPI
,然后将
DependencyResolver
设置为
new Unity.WebAPI.UnityDependencyResolver(容器)


信用证:

并删除所有直接无关的代码以使问题更清楚,请//这抛出“似乎没有实现Microsoft.Practices.ServiceLocation.IServiceLocator…错误”,同样值得Unity团队注意:和。因此,可以在控制器中使用GlobalConfiguration.Configuration.DependencyResolver吗?
protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            Bootstrapper.Initialise();
        }
 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
              name: "RestApi",
              routeTemplate: "api/{controller}/{action}/{id}",
              defaults: new { id = RouteParameter.Optional }
            );
public static class Bootstrapper
  {
    public static IUnityContainer Initialise()
    {
      var container = BuildUnityContainer();

      DependencyResolver.SetResolver(new UnityDependencyResolver(container));

      GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

      return container;
    }