无法在 webapi 控制器中解析 Unity.AspNet.Mvc 的依赖关系
Unable to resolve dependencies with Unity.AspNet.Mvc in webapi controller
我正在使用 Asp.Net MVC 5 并试图连接我对网络 api 控制器的依赖关系,但它不起作用,并说控制器需要一个无参数的构造函数。
我已将统一容器更新为 v4,这意味着更新了一些其他引用,即 unity.abstractions 也是 v4。
我使用的是 unity.mvc 而不是 unity.mvc5。
在 UnityConfig 我有
public static class UnityConfig
{
private static readonly Lazy<IUnityContainer> Container = new Lazy<IUnityContainer>(InitialiseContainer, LazyThreadSafetyMode.ExecutionAndPublication);
public static IUnityContainer ConfiguredContainer()
{
return Container.Value;
}
private static IUnityContainer InitialiseContainer()
{
var container = new UnityContainer();
//DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container));
//GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
// Auth
container.RegisterType<IAuthenticationManager>(new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication));
container.RegisterType<ApplicationUserManager>(new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
container.RegisterType<IUserStore<LiApplicationUser>> (new InjectionFactory(c => new UserStore<LiApplicationUser>(new ApplicationIdentityDbContext())));
// Repository
container.RegisterType<LeisureInsureEntities>(new InjectionFactory(c => ContextFactory.Context()));
container.RegisterType<ICar, Volvo>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
return container;
}
}
我注释掉了 unity.mvc5 代码不再需要,因此将其删除。这似乎需要 unity.abstractions v2,并且不接受 4.
当我尝试注入网络api 控制器时,我是否还需要Unity.WebAPI?这给出了与 Unity.Mvc5 相同的问题并且是由同一个人开发的,即它不喜欢我后来的版本 unity.abstractions。
在我的网络api 控制器中,我正在查看是否可以连接沃尔沃作为测试
public class StripeController : ApiController
{
private readonly IEndpointInstance _endpoint;
private readonly ICar car;
//public StripeController(IEndpointInstance endpoint)
//{
// _endpoint = endpoint;
//}
public StripeController(ICar newcar)
{
car = newcar;
}
谢谢
您将需要 Unity.AspNet.WebApi 适配器来配置您的 ApiControllers。
注意不要混淆包。其中一些不是同一个项目所有者(Unity.Mvc5,Unity.WebAPI)。我没有用过那些所以我不能评论它的适用性。
我有一个例子https://github.com/jasenhk/MovieStar from another that uses Unity v5.10 and Unity.MVC as well as Unity.AspNet.WebApi。
这里是packages.config
<package id="Unity" version="5.10.2" targetFramework="net461" />
<package id="Unity.Abstractions" version="4.1.2" targetFramework="net461" />
<package id="Unity.AspNet.WebApi" version="5.10.0" targetFramework="net461" />
<package id="Unity.Container" version="5.10.2" targetFramework="net461" />
<package id="Unity.Mvc" version="5.10.0" targetFramework="net461" />
我正在使用 Asp.Net MVC 5 并试图连接我对网络 api 控制器的依赖关系,但它不起作用,并说控制器需要一个无参数的构造函数。
我已将统一容器更新为 v4,这意味着更新了一些其他引用,即 unity.abstractions 也是 v4。
我使用的是 unity.mvc 而不是 unity.mvc5。
在 UnityConfig 我有
public static class UnityConfig
{
private static readonly Lazy<IUnityContainer> Container = new Lazy<IUnityContainer>(InitialiseContainer, LazyThreadSafetyMode.ExecutionAndPublication);
public static IUnityContainer ConfiguredContainer()
{
return Container.Value;
}
private static IUnityContainer InitialiseContainer()
{
var container = new UnityContainer();
//DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container));
//GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
// Auth
container.RegisterType<IAuthenticationManager>(new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication));
container.RegisterType<ApplicationUserManager>(new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
container.RegisterType<IUserStore<LiApplicationUser>> (new InjectionFactory(c => new UserStore<LiApplicationUser>(new ApplicationIdentityDbContext())));
// Repository
container.RegisterType<LeisureInsureEntities>(new InjectionFactory(c => ContextFactory.Context()));
container.RegisterType<ICar, Volvo>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
return container;
}
}
我注释掉了 unity.mvc5 代码不再需要,因此将其删除。这似乎需要 unity.abstractions v2,并且不接受 4.
当我尝试注入网络api 控制器时,我是否还需要Unity.WebAPI?这给出了与 Unity.Mvc5 相同的问题并且是由同一个人开发的,即它不喜欢我后来的版本 unity.abstractions。
在我的网络api 控制器中,我正在查看是否可以连接沃尔沃作为测试
public class StripeController : ApiController
{
private readonly IEndpointInstance _endpoint;
private readonly ICar car;
//public StripeController(IEndpointInstance endpoint)
//{
// _endpoint = endpoint;
//}
public StripeController(ICar newcar)
{
car = newcar;
}
谢谢
您将需要 Unity.AspNet.WebApi 适配器来配置您的 ApiControllers。
注意不要混淆包。其中一些不是同一个项目所有者(Unity.Mvc5,Unity.WebAPI)。我没有用过那些所以我不能评论它的适用性。
我有一个例子https://github.com/jasenhk/MovieStar from another
这里是packages.config
<package id="Unity" version="5.10.2" targetFramework="net461" />
<package id="Unity.Abstractions" version="4.1.2" targetFramework="net461" />
<package id="Unity.AspNet.WebApi" version="5.10.0" targetFramework="net461" />
<package id="Unity.Container" version="5.10.2" targetFramework="net461" />
<package id="Unity.Mvc" version="5.10.0" targetFramework="net461" />