C# 在MVC 5中读取并使用appsettings.json中的设置

C# 在MVC 5中读取并使用appsettings.json中的设置,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我有一个MVC5项目(framework 4.6.1),我想从appsettings.json加载一个POCO 我的MVC应用程序没有Startup.cs,起点似乎是Global.asax。 我尝试添加Owin来创建Startup.cs,但与我发现的大多数文章相反,配置似乎是在启动期间调用的无效方法,而不是NetCore中的IConfiguration 基本上是尝试做我想做的事情,但也假设配置是一个IConfiguration接口。好的,我最后做的是: 我想从我的appsettings.json

我有一个MVC5项目(framework 4.6.1),我想从appsettings.json加载一个POCO

我的MVC应用程序没有Startup.cs,起点似乎是Global.asax。 我尝试添加Owin来创建Startup.cs,但与我发现的大多数文章相反,配置似乎是在启动期间调用的无效方法,而不是NetCore中的IConfiguration


基本上是尝试做我想做的事情,但也假设配置是一个IConfiguration接口。

好的,我最后做的是:

我想从我的appsettings.json加载一个类为
ScrumBan
的对象

我申报了这门课

public class ChartConfiguration: IChartConfiguration
{
    public Scrumban Scrumban { get; }
    public ChartConfiguration()
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();
        Scrumban = new Scrumban();
        configuration.GetSection("Scrumban").Bind(Scrumban);

    }
}
该接口仅公开
ScrumBan
对象:

public interface IChartConfiguration
{
    Scrumban Scrumban { get; }
}
然后,我将Unity用于依赖项注入处理,并注册了我的接口:

public static class IocExtensions
{
    public static void BindInRequestScope<T1, T2>(this IUnityContainer container) where T2 : T1
    {
        container.RegisterType<T1, T2>(new HierarchicalLifetimeManager());
    }

}

public class UnityMvc5
{
    public static void Start()
    {
        var container = BuildUnityContainer();
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // Configuration object, one per request, ensure it is disposed
        container.BindInRequestScope<IChartConfiguration, ChartConfiguration>();

        return container;
    }
}
有了Unity,我现在可以更改我的控制器构造函数,以包括我的IChartConfiguration接口,并将其存储以供将来参考,这与ASP.NET Core的常见做法完全相同

我不太确定实例化模型BindInRequestScope,我可以选择singleton,但据我所知,ChartConfiguration构造函数并不是每个请求都调用的。同样,我也不确定reloadOnChange的价值,但它对我的应用程序并不重要


希望这对像我这样的人有所帮助。

您链接到的文章是关于ASP.NET Core MVC的(以前称为MVC 6,ASP.NET Core以前称为ASP.NET 5,但现在这些名称已被取消)。但是,请注意,您可以制作一个针对.NET Framework的ASP.NET核心应用程序。好吧,这增加了新的混乱程度,但是我的应用程序使用System.Web.Helpers.Chart,所以我想ASP.NET核心不是我的选项
    protected void Application_Start()
    {
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AreaRegistration.RegisterAllAreas();
        UnityMvc5.Start();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }