【问题标题】:.NET Core MVC Startup equivalent.NET Core MVC 启动等效项
【发布时间】:2019-12-11 05:30:29
【问题描述】:

我想知道的是,因为我想为我的 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 中实现这一点。

【问题讨论】:

标签: c# .net asp.net-mvc .net-core


【解决方案1】:

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

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

【讨论】:

  • 或者自己写(不推荐,但似是而非)
【解决方案2】:

.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 解决依赖关系。

参考:

Dependency injection into controllers in ASP.NET Core

.Net Core Dependency Injection

【讨论】:

    猜你喜欢
    • 2017-07-23
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2018-07-01
    • 2018-03-05
    相关资源
    最近更新 更多