我试图用Simple Injector做一些基本的构造函数DI,似乎它无法解析Web API控制器的依赖关系.
SimpleInjectorWebApiDependencyResolver
文档的基础,这也是在这里找到的.这似乎不是问题,但我仍然收到以下错误:
类型"MyProject.API.ArticleController"没有默认构造函数
System.ArgumentException at
System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator的System.Web.Http.Internal.TypeActivator.Create [TBase](Type instanceType)中的System.Linq.Expressions.Expression.New(Type type)(HttpRequestMessage请求,类型为controllerType) System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType),Func`1&activator)
如果有人可以提供一些关于是否应该从其当前状态/呼叫顺序修改任何内容的建议,将不胜感激.
ArticleController(基本结构):
public class ArticleController : ApiController
{
private readonly IArticleRepository articleRepository;
private readonly IUserRepository userRepository;
private readonly IReleaseRepository releaseRepository;
public ArticleController(IArticleRepository articleRepository, IUserRepository userRepository, IReleaseRepository releaseRepository)
{
this.articleRepository = articleRepository;
this.userRepository = userRepository;
this.releaseRepository = releaseRepository;
}
// GET api/Article
public IEnumerable<Article> GetArticles(){ // …
Run Code Online (Sandbox Code Playgroud) 我想知道是否有更好的方法来处理此问题。
我已经为我们的项目设置了Unity以进行依赖项注入。该项目本身是使用Web API的ASP.NET应用程序。
我安装了以下软件包。
我看不到在获取数据后立即关闭/处置DBContext的选项。
我的控制器
public class NinjasController : ApiController
{
public Ninja Get(int id)
{
INinjaRepository repository = UnityConfig.Container.Resolve(typeof(INinjaRepository), null) as INinjaRepository;
Ninja ninja = repository.GetNinjaById(id);
repository.CanBeDisposed = true;
repository = null;
UnityConfig.PerRequestLifetimeManager.Dispose();
return ninja;
}
}
Run Code Online (Sandbox Code Playgroud)
UnityConfig
public static class UnityConfig
{
private static Lazy<IUnityContainer> container =
new Lazy<IUnityContainer>(() =>
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
});
public static IUnityContainer Container => container.Value;
public static PerRequestLifetimeManager PerRequestLifetimeManager;
public static void RegisterTypes(IUnityContainer container) …
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET WebApi解决方案中使用Unity.WebApi NuGet包(Unity 4.0.1和Unity.WebApi 5.2.3).我面临的问题是,在尝试运行代码时,我收到错误:Make sure that the controller has a parameterless public constructor
.我在这里搜索过类似的帖子,但我找不到任何符合我问题的帖子.
请不要只说"添加无参数构造函数",因为它显示您显然不知道IoC是什么以及为什么该语句完全没有意义并且违背了IoC的目的.我之所以这么说是因为我在迄今为止看过的很多其他主题中看到了这一点.
这是我的Startup.cs(我使用的是Owin,所以我没有Global.asax):
public void Configuration(IAppBuilder app) {
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
// Registering unity stuff
UnityConfig.RegisterComponents();
app.UseWebApi(config);
}
Run Code Online (Sandbox Code Playgroud)
这是我的UnityConfig.cs:
public static class UnityConfig {
public static void RegisterComponents() {
var container = new UnityContainer();
// Register controller
container.RegisterType<MyController>();
// Register interface
container.RegisterType<IService, Service>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的API控制器:
public class MyController : ApiController {
private IService service
public MyController(IService service) …
Run Code Online (Sandbox Code Playgroud) c# dependency-injection inversion-of-control unity-container asp.net-web-api
我正在努力解决使用untiy的依赖注入问题.我已根据此链接实施https://www.asp.net/web-api/overview/advanced/dependency-injection
但得到了这个错误:
{
"Message": "An error has occurred.",
"ExceptionMessage": "An error occurred when trying to create a controller of type 'WebAPIController'. Make sure that the controller has a parameterless public constructor.",
"ExceptionType": "System.InvalidOperationException",
"StackTrace": " at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
"InnerException": {
"Message": "An error has occurred.",
"ExceptionMessage": "Type 'Fairmoves.Controllers.WebAPIController' does not have a default constructor",
"ExceptionType": "System.ArgumentException",
"StackTrace": " at System.Linq.Expressions.Expression.New(Type type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type …
Run Code Online (Sandbox Code Playgroud)asp.net-mvc dependency-injection inversion-of-control unity-container asp.net-web-api