c# - Web.MVC 中的简单注入(inject)器,未发生注入(inject)

标签 c# asp.net-mvc simple-injector

我是第一次使用 Simple Injector。 Nuget MVC QuickStart 版本。在 SimpleInjectorInializer.cs 中,这被调用。

public static class SimpleInjectorInitializer
{
 /// <summary>Initialize the container and register it as MVC3 Dependency Resolver.</summary>
   public static void Initialize()
   {
      // Did you know the container can diagnose your configuration? 
     // Go to: https://simpleinjector.org/diagnostics
     var container = new Container();

     InitializeContainer(container);    
                container.RegisterMvcControllers(Assembly.GetExecutingAssembly());

            container.Verify();

      DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
  }

  private static void InitializeContainer(Container container)
  {                 
   // For instance:
   container.Register<IQueryProcessor, QueryProcessor>(Lifestyle.Singleton);
   container.RegisterInitializer<WebApiController>(
                p=> p.QueryProcessor = container.GetInstance<IQueryProcessor>());
   }

WebApiController.cs. Injection doesn't happen. 

public class WebApiController : ApiController
{

 public IQueryProcessor QueryProcessor { get; set; }

 public WebApiController(IQueryProcessor queryProcessor)
 {

   QueryProcessor = queryProcessor;

 }

最佳答案

MVC Controller 与 ASP.NET5 (MVC 6) 之前的 WebAPI Controller 不同,因为 MVC Controller 实现了 IController 接口(interface),而 Web API Controller 实现了 IHttpController界面。

Simple Injector 使得覆盖默认的 IHttpController 实例变得非常容易,根据他们的 documentation .

using System.Web.Http;
using SimpleInjector;
using SimpleInjector.Integration.WebApi;

// This is the Application_Start event from the Global.asax file.
protected void Application_Start() {
    // Create the container as usual.
    var container = new Container();

    // Register your types, for instance using the RegisterWebApiRequest
    // extension from the integration package:
    container.RegisterWebApiRequest<IUserRepository, SqlUserRepository>();

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

    container.Verify();

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

    // Here your usual Web API configuration stuff.
}

关于c# - Web.MVC 中的简单注入(inject)器,未发生注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380438/

相关文章:

c# - 如何正确过滤绑定(bind)到 sqldatasource 的 gridview

asp.net-mvc - 在 MVC 中捕获 form.submit() 响应

css - .aspx 页面上的背景图像

c# - 将 Autofac 转换为简单的注入(inject)器

.net - 如何配置 Simple Injector IoC 以使用 RavenDB

c# - 使用相同泛型类型的另一个依赖项注册装饰器

c# - 使用多个 Gridview C# WPF 更新 ListView

c# - 比较 'mobile numbers' - 和/或国际格式

c# - T-SQL 中的 AES 加密和 C# 解密

asp.net-mvc - 自定义 MVC 验证属性和 Bootstrap 格式问题