结构图方法 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" 那里处理一切。