结构图方法 Populate() 不适用于 ASP.NET 核心
Structure Map method Populate() doesn't work for ASP.NET Core
根据 StructureMap.Microsoft.DependencyInjection 存储库中的 StructureMap documentation and examples,它必须工作但没有。
这是我的 Startup class:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<IMovieRepository, MovieRepository>();
var container = new Container();
container.Configure(config =>
{
config.AddRegistry(new MyRegistry());
config.Populate(services);
});
return container.GetInstance<IServiceProvider>();
}
和注册表:
public class MyRegistry : Registry
{
public MyRegistry()
{
For<IMovieRepository>().Transient().Use<MovieRepository>();
}
}
这里是错误截图:
我的代码有什么问题?
我决定将 IoC 更改为 Autofac。同样的问题出现了。我正在关注 asp.net 核心的 autofac 文档并跳过一些细节。花了三天时间才发现我引用了错误的包裹。当我真正需要的是 Autofac.Extensions.DependencyInjection 包时,我参考了 autofac 包。这是一个荒谬的错误,把我踢了三天。我真的相信我在结构图上犯了同样的错误,所以只要寻找 StructureMap.AspNetCore 包而不是 StructureMap 包,一切都会起作用。
!认真阅读文档!
您还应该将以下 nuget 包添加到您的项目中,以便使用 Configuration 选项的 Populate 方法。
包名:StructureMap.Microsoft.DependencyInjection
不过您不必将此库导入启动 class。 "using StructureMap" 那里处理一切。
根据 StructureMap.Microsoft.DependencyInjection 存储库中的 StructureMap documentation and examples,它必须工作但没有。
这是我的 Startup class:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<IMovieRepository, MovieRepository>();
var container = new Container();
container.Configure(config =>
{
config.AddRegistry(new MyRegistry());
config.Populate(services);
});
return container.GetInstance<IServiceProvider>();
}
和注册表:
public class MyRegistry : Registry
{
public MyRegistry()
{
For<IMovieRepository>().Transient().Use<MovieRepository>();
}
}
这里是错误截图:
我的代码有什么问题?
我决定将 IoC 更改为 Autofac。同样的问题出现了。我正在关注 asp.net 核心的 autofac 文档并跳过一些细节。花了三天时间才发现我引用了错误的包裹。当我真正需要的是 Autofac.Extensions.DependencyInjection 包时,我参考了 autofac 包。这是一个荒谬的错误,把我踢了三天。我真的相信我在结构图上犯了同样的错误,所以只要寻找 StructureMap.AspNetCore 包而不是 StructureMap 包,一切都会起作用。
!认真阅读文档!
您还应该将以下 nuget 包添加到您的项目中,以便使用 Configuration 选项的 Populate 方法。
包名:StructureMap.Microsoft.DependencyInjection
不过您不必将此库导入启动 class。 "using StructureMap" 那里处理一切。