Web.MVC 中的简单注入器,未发生注入
Simple Injector in Web.MVC, injection not occuring
我是第一次使用 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 控制器与 ASP.NET5 (MVC 6) 之前的 WebAPI 控制器不同,因为 MVC 控制器实现 IController
接口和 Web API 控制器实现 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.
}
我是第一次使用 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 控制器与 ASP.NET5 (MVC 6) 之前的 WebAPI 控制器不同,因为 MVC 控制器实现 IController
接口和 Web API 控制器实现 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.
}