带有 Web API 2 的简单注入器。预应用程序启动方法不运行



我的Web API和AngularJS项目遵循洋葱架构。在基础设施中。DependencyResolution部分,我使用简单注入器。下面是我的代码:

[assembly: PreApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")]
namespace Infrastructure.DependencyResolution
{
    public class IocConfig
    {
         private static Container _container;
         public static void RegisterDependencies()
         {
              _container = new Container();
              _container.Verify();
              _container.RegisterWebApiRequest<IEntitiesContext>(() =>
              {
                   return new MyContext();
              });
              _container.RegisterWebApiRequest<IUserRepository, UserRepository>();
              _container.RegisterWebApiRequest<IAccountService, AccountService>();
              _container.RegisterWebApiRequest<IUnitOfWork, UnitOfWork>();
         }
    }
}

现在,如果我试图把url转到我的帐户控制器,我得到这个错误:

创建类型为的控制器时发生错误"AccountController"。确保控制器具有无参数公共构造函数。

我搜索了一下,发现Simple Injector有一些不同的Web Api代码,如他们的网站所建议的:

// This is an extension method from the integration package.
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

我也复制了这个,但是它不接受GlobalConfiguration。配置,我猜是因为我在一个库项目中使用它。

当我在RegisterDependencies方法中设置断点时,Visual Studio不会在断点处停止。

谁能告诉我该怎么走?

您缺少的是Web API集成指南中描述的SimpleInjectorWebApiDependencyResolver的注册:

GlobalConfiguration.Configuration.DependencyResolver =
    new SimpleInjectorWebApiDependencyResolver(container);

不重写Web API的默认IDependencyResolver, Web API将简单地尝试实例化控制器实例本身,这需要控制器类型有一个默认构造函数。通过将IDependencyResolver替换为SimpleInjectorWebApiDependencyResolver,对控制器实例的请求被转发到简单注入器容器。

当你使用Simple Injector的Web API Quick Start NuGet包时,你会获得最大的成功。这将引导您的应用程序,并允许您快速开始。

相关内容

  • 没有找到相关文章

最新更新