我试图致电我的webAPI控制器后有一个错误,
试图创建" DrinkController"类型的控制器时发生了错误。确保控制器具有无参数的公共构造函数。
这是我的bootstrapper.cs
public class Bootstrapper
{
public Container Start(HttpConfiguration configuration)
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new LifetimeScopeLifestyle();
var conString = ConfigurationManager.ConnectionStrings["DrinksContext"].ConnectionString;
container.Register(() => new DrinksContext(conString), Lifestyle.Scoped);
container.Register<IUserManager, UserManager>();
container.Register<IDrinkManager, DrinkManager>();
container.Register<IOrderManager, OrderManager>();
container.Register<IUnitOfWork, UnitOfWork>();
container.RegisterWebApiControllers(configuration);
container.Verify();
return container;
}
}
在这里我在global.asax.cs
中如何称呼他void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
var container = new Bootstrapper().Start(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.UseDataContractJsonSerializer = false;
}
控制器 ->
private readonly IOrderManager _orderManager;
private readonly IDrinkManager _drinkManager;
public DrinkController(IOrderManager orderManager, IDrinkManager drinkManager)
{
_orderManager = orderManager;
_drinkManager = drinkManager;
}
unitiofwork构造函数取决于drinkscontext;
Postman响应 - 这里
我将单位工程注入我的经理。DrinkScontext应根据每个请求重新初始化。当行 container.RegisterWebApiControllers(configuration)
执行控制器构造函数已触发,但是当Postman的呼叫时 - 不。我如何解决它?谢谢。
如果您查看了抛出异常的内部例外,您将看到以下信息:
该对象被注册为"终生范围"的生活方式,但是该实例是在终生范围之外的上下文中要求的。
这是因为需要明确启动寿命范围。但是,由于两个框架的异步行为,寿命范围不适合与MVC和Web API一起使用。由于您在IIS内部运行,因此您应该使用WebRequestLifestyle
作为默认的范围范围的生活方式。
我认为问题在您的Unity配置文件中。也许尝试这样做:
public Container Start(HttpConfiguration configuration)
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new LifetimeScopeLifestyle();
var conString = ConfigurationManager.ConnectionStrings["DrinksContext"].ConnectionString;
container.Register(() => new DrinksContext(conString), Lifestyle.Scoped);
container.Register<IUserManager, UserManager>();
container.Register<IDrinkManager, DrinkManager>(new InjectionConstructor());
container.Register<IOrderManager, OrderManager>(new InjectionConstructor());
container.Register<IUnitOfWork, UnitOfWork>();
container.RegisterWebApiControllers(configuration);
container.Verify();
return container;
}
致电类实施的" dafult"空无一人(如果您有一个以上的构图。.Unityt选择具有更多参数的unityt。在您的班级构造函数中,装饰[IndectionConstructor])
希望它能帮助