C# 无法将简单喷油器用于DI
我刚开始使用DI和ASP.NET,我很难让简单的注入器工作。我使用NuGet添加了SimpleInjector 3.1.5作为参考。以下是我到目前为止的情况: Global.asax.cs:C# 无法将简单喷油器用于DI,c#,visual-studio,asp.net-mvc-4,dependency-injection,simple-injector,C#,Visual Studio,Asp.net Mvc 4,Dependency Injection,Simple Injector,我刚开始使用DI和ASP.NET,我很难让简单的注入器工作。我使用NuGet添加了SimpleInjector 3.1.5作为参考。以下是我到目前为止的情况: Global.asax.cs: ... using SimpleInjector; using SimpleInjector.Integration.WebApi; using SimpleInjector.Integration.Web; using SimpleInjector.Integration.Web.Mvc; ... pro
...
using SimpleInjector;
using SimpleInjector.Integration.WebApi;
using SimpleInjector.Integration.Web;
using SimpleInjector.Integration.Web.Mvc;
...
protected void Application_Start()
{
Database.SetInitializer<ProductContext>(new ProductInitializer());
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register<IProductRepository, ProductRepository>(Lifestyle.Scoped);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.RegisterMvcIntegratedFilterProvider();
container.Verify();
}
产品存储库类:
...
public class ProductRepository:IProductRepository
{
private ProductContext db;
public ProductRepository(ProductContext db)
{
this.db = db;
}
public IEnumerable<Product> GetAll()
{
return db.Products.ToList();
}
...
当我尝试运行程序时,出现以下错误:
配置无效。报告了以下诊断警告:
-[生活方式不匹配]ProductRepository Web请求取决于ProductContext
-[Short Circuited Dependency]DefaultController可能错误地依赖于未注册的类型ProductRepository Transient,而不是IPProductRepository Web请求
-[Dispossible Transient Component]ProductContext注册为Transient,但实现IDisposable
-[不明确的生活方式]IPProductRepository Web请求的注册映射到与ProductRepository瞬态注册相同的实现ProductRepository,但注册映射到不同的生活方式。这将导致每个注册解析为不同的实例
-[不明确的生活方式]ProductRepository临时注册映射到与IPProductRepository Web请求注册相同的实现ProductRepository,但注册映射到不同的生活方式。这将导致每个注册解析为不同的实例
有关警告的详细信息,请参阅Error属性。请参阅如何修复问题以及如何抑制单个警告
请将简易喷油器更新至最新版本,并检查更新的文档: ASP.NET核心: ASP.NET MVC:
或者从左侧边栏菜单中选择您的集成选项是否包含用于与Web API和MVC集成的Simple Injector NuGet软件包?@Steven:在尝试安装与Web API集成的软件包时,我遇到了一个错误:“SimpleInjector.Extensions.ExecutionContextScoping”已经对“SimpleInjector”有依赖关系。您还有一个小问题,当使用DI public DefaultControllerIProductRepository时,您应该使用该接口pr@OrelEraki这就是简单注入器的优点:当您调用Verify时,它会发出警告。但是非常敏锐的观察。@ray9209 c编译器并没有撒谎;您缺少这些程序集。努吉可能搞砸了;这种情况经常发生。只需创建一个新的.NET4.5项目并重新开始。
...
public class ProductRepository:IProductRepository
{
private ProductContext db;
public ProductRepository(ProductContext db)
{
this.db = db;
}
public IEnumerable<Product> GetAll()
{
return db.Products.ToList();
}
...