.NET简单喷油器.注册Webapicontrollers没有无参数的公共构造函数



我试图致电我的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])

希望它能帮助

相关内容

最新更新