C# Web.MVC中的简单喷油器,未发生喷油
我第一次使用简易注射器。获取MVC快速启动版本。在SimpleInjectorializer.cs中,将调用此函数C# Web.MVC中的简单喷油器,未发生喷油,c#,asp.net-mvc,simple-injector,C#,Asp.net Mvc,Simple Injector,我第一次使用简易注射器。获取MVC快速启动版本。在SimpleInjectorializer.cs中,将调用此函数 public static class SimpleInjectorInitializer { /// <summary>Initialize the container and register it as MVC3 Dependency Resolver.</summary> public static void Initialize()
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;
}
公共静态类SimpleInjector初始值设定项
{
///初始化容器并将其注册为MVC3依赖项解析器。
公共静态void Initialize()
{
//您知道容器可以诊断您的配置吗?
//转到:https://simpleinjector.org/diagnostics
var container=新容器();
初始化容器(容器);
container.RegisterMvcControllers(Assembly.getExecutionGassembly());
container.Verify();
SetResolver(新的SimpleInjectDependencyResolver(容器));
}
私有静态void InitializeContainer(容器)
{
//例如:
容器。登记(生活方式。单身);
container.RegisterInitializer(
p=>p.QueryProcessor=container.GetInstance());
}
WebApiController.cs.注入没有发生。
公共类WebApicController:ApicController
{
公共IQueryProcessor查询处理器{get;set;}
公共WebApicController(IQueryProcessor查询处理器)
{
查询处理器=查询处理器;
}
MVC控制器与ASP.NET5(MVC 6)之前的WebAPI控制器不同,因为MVC控制器实现了IController
接口,而Web API控制器实现了IHttpController
接口
Simple Injector可以很容易地覆盖默认的IHttpController
实例化
使用System.Web.Http;
使用SimpleInjector;
使用SimpleInjector.Integration.WebApi;
//这是Global.asax文件中的应用程序启动事件。
受保护的无效应用程序\u Start(){
//像往常一样创建容器。
var container=新容器();
//注册您的类型,例如使用RegisterWebapireRequest
//集成包的扩展:
container.RegisterWebApiRequest();
//这是集成包中的扩展方法。
容器.RegisterWebApp控制器(全局配置.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver=
新的SimpleInjectorWebApidencyResolver(容器);
//这里是您常用的Web API配置资料。
}
对于Web API,您肯定还需要做更多的事情。您是否已经有了为Web API设置某些内容的代码?RegisterInitializer
可能是一些测试代码,但最好不要完全使用属性注入。请坚持使用构造函数注入。然后我有了无法加载文件或程序集'System.Web.Http,版本=4.0.0.0"但是通过添加绑定重定向很容易修复。谢谢!@kay00:NuGet软件包管理器通常会自动为您修复绑定重定向,但由于某些原因,这种情况并不经常发生。有时卸载软件包并重新安装是使其重新工作所需的全部,在其他情况下,您必须修复b手动绑定。SimpleInjector.Integration.WebApi
依赖于Microsoft.AspNet.WebApi.Core
,但如果我们使用的是ASP.NET而不是ASP.NET Core,为什么它依赖于Core?或者WebApi.Core不是ASP.NET Core中的Core?
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.
}