我是使用DI和ASP.NET的新手,我很难让Simple Injector工作。我使用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 DefaultController : Controller
{
private ProductRepository productRepo;
public DefaultController(ProductRepository pr)
{
this.productRepo = pr;
}
...
产品存储库类:
...
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(Transient)。
- [Short Circuited Dependency] DefaultController可能错误地依赖于未注册的类型ProductRepository(Transient)而不是IProductRepository(Web Request)。
- [Disposable Transient Component] ProductContext注册为transient,但实现了IDisposable。
- [不明确的生活方式] IProductRepository(Web请求)的注册映射到与ProductRepository(Transient)注册相同的实现(ProductRepository),但注册映射到不同的生活方式。这将导致每个注册解析为不同的实例。
- [不明确的生活方式] ProductRepository(Transient)的注册映射到与IProductRepository(Web Request)的注册相同的实现(ProductRepository),但注册映射到不同的生活方式。这将导致每个注册解析为不同的实例。
有关警告的详细信息,请参阅Error属性。请参阅https://simpleinjector.org/diagnostics如何解决问题以及如何压制个别警告。
答案 0 :(得分:0)
请将您的Simple Injector更新至最新版本,并查看更新的文档:
ASP.NET Core:https://simpleinjector.readthedocs.io/en/latest/aspnetintegration.html ASP.NET MVC:https://simpleinjector.readthedocs.io/en/latest/mvcintegration.html
或从左侧边栏菜单中选择集成选项