0

我想知道的是,因为我想为我的 Web 应用程序 (MVC) 控制器实现依赖注入容器。在 .NET Core 框架中,我曾经Startup.cs在项目中有一个文件,用于向容器添加瞬态和依赖注入,也用于DbContext

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddDbContext<LibraryContext>();
        services.AddTransient<IGetBooksCommand, EfGetBooksCommand>();
    }

我想知道如何在完整的 .NET Framework 中实现这一点。

4

2 回答 2

2

在 .Net Core 之前,没有对依赖注入的内置支持,获得它的唯一方法是通过使用第三方框架,例如AutofacCastle WindsorUnityNinject ..etc

您可以检查任何这些框架并在您的项目中使用它们。

于 2019-12-11T05:55:11.510 回答
1

.Net core Mvc 支持内置的依赖注入,它能够在控制器中注入依赖。所以注册如下的依赖可以在控制器中使用

services.AddTransient<IGetBooksCommand, EfGetBooksCommand>();

然而,内置的依赖注入功能可以被更成熟的 DI 框架取代。这非常简单,如下是使用 Autofac 的示例

public IServiceProvider ConfigureServices(IServiceCollection services) {
    var builder = new ContainerBuilder();
    builder.Populate(services);
    builder.RegisterType<EfGetBooksCommand>().As<IGetBooksCommand>();
    var container = builder.Build();
    return new AutofacServiceProvider(container);
}

ConfigureServices 方法现在返回 IServiceProvider 而不是 void。现在将使用 Autofac 解决依赖关系。

参考:

依赖注入到 ASP.NET Core 中的控制器

.Net 核心依赖注入

于 2019-12-11T07:11:59.143 回答