C# 无法将简单喷油器用于DI

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

我刚开始使用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;
...
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();
    }
...