2017-12-22 13 views
0

コンパイルされません。 (コード内の私の注記を参照)をコンパイルしないという行があります。.NETコア2.0コンソールアプリケーションは、私が<strong>.NETコア2.0 CONSOLE</strong>アプリケーションを設定したい

私は、これは、.NETのコアアプリケーションを設定する承認された方法であると考えられるなど非常に多くのブログ、ウェブサイトをチェックしています。アセンブリの参照がありませんか?

using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 
using Microsoft.Extensions.Options; 
using System; 
using System.IO; 

namespace fbs.Console 
{ 
    class Program 
    { 
     public static IConfiguration configuration; 
     public static IServiceProvider serviceProvider; 

     static void Main(string[] args) 
     { 
      // Create service collection 
      ConfigureServices(); 

      var dbService = serviceProvider.GetRequiredService<IDbContext>(); 
     } 

     private static void ConfigureServices() 
     { 
      var builder = new ConfigurationBuilder() 
       .SetBasePath(Directory.GetCurrentDirectory()) 
       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); 

      configuration = builder.Build(); 

      var appSettings = new AppSettings(); 
      var section = configuration.GetSection("AppSettings"); 

      IServiceCollection services = new ServiceCollection(); 

      services.AddOptions(); 
      // The following statement does NOT compile??? 
      services.Configure<AppSettings>(section); 
      services.AddSingleton<IDbContext, DbContext>(); 

      serviceProvider = services.BuildServiceProvider(); 
     } 
    } 

    public class AppSettings 
    { 
     public string Database { get; set; } 
    } 

    public interface IDbContext 
    { 
     string Database { get; set; } 
    } 

    public class DbContext : IDbContext 
    { 
     public string Database { get; set; } 

     public DbContext(IOptions<AppSettings> appSettings) 
     { 
      this.Database = appSettings.Value.Database; 
     } 
    } 
} 

編集: コンパイラエラーは言う:

Error CS1503 Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<fbs.Console.AppSettings'. 

ちょうど新しい.NETのコア2.0コンソールアプリケーションを作成し、問題を再現するためには、&は私のコードを貼り付けしようとコピーコンパイル。

+0

私たちに多くの情報を与えるためにあなたの質問を更新してください:タイトルは、問題を説明するエラーメッセージを提供し、あなたが訪問したブログやウェブサイトへのリンクを挿入しません。 – FIL

+0

@FIL:そうです。申し訳ありません。とにかく、問題は解決されました(私の編集を見てください)。あなたの返信をありがとう! – Ingmar

答えて

0

解決済み: 実際に私はMicrosoft.Extensions.Options.ConfigurationExtensionsをプロジェクトに追加することができませんでした。私はこのアセンブリが必要であることを知らなかったので、が不要であると思われます。を "using"節として追加します。少なくとも、NuGetを使ってパッケージを追加するだけで、私のコードはコンパイルされています(しかし、usingステートメントに変更はありません)。私はちょっと混乱しています。

+0

これは、マイクロソフト社がコアで少し酷使している拡張機能の欠点の1つです。 'IServiceCollection.Configure'はその名前空間の外に存在しますが、拡張メソッドが行うことはしません。拡張名前空間を明示的に含める場合を除き、基本的に正しい方法を使用していないため、例外が発生します。問題は、拡張機能があまりにも魔法であることです.Visual Studioは、追加するために使用するネームスペースを追加する必要があるという事実にあなたを結びつけるのには大したことではありません。 –

関連する問題