2016-06-15 12 views
1

1.0 RC1から1.0 RC2に移植しようとした後でasp.netコアアプリケーションを起動できません。私が得るスタートアップエラーは次のとおりです。ASP.NET RC2の依存性注入エラー

Unhandled Exception: System.Exception: Could not resolve a service of type 'Microsoft.Extensions.Configuration.IConfiguration' for the parameter 'configuration' of method 'Configure' on type 'MYCOMPANY.MYTHING.Api.Startup'. 
    at Microsoft.AspNetCore.Hosting.Startup.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) 
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() 
    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() 
    at MYCOMPANY.MYTHING.Api.Program.Main(String[] args) 

これはどのように動作するはずですか?私は理解して

パーツは以下のとおりです。

  • マイstartup.csコードは、スタートアップで、私には正しいよう(IHostingEnvironmentのENV)私はConfigurationBuilderを作成し、builder.Build(に等しいStartup.Configurationを設定します) 。 ConfigureServicesメソッドにも到達し、そこにConfigurationオブジェクトが存在します。

  • Program.csでhost.Run()コードに達するとクラッシュします。

  • 設定(app、env、loggerFactory、configuration、respository ...)メソッドは決して達成されません。 RC1では

  • このような行があるように使用:(私は働く新しいアプリケーションを読み、ラインを比較しようとしています新しいアプリケーションではもはや存在しないRC2では

    services.AddInstance<IConfiguration>(Configuration); 
    
  • 行ごとに)。

私はこの仕事を作る方法を探して、そしてどのようにIConfigurationRootの依存性注入を理解するために、私は、この注射のために責任があるように思われる任意の属性やコードが表示されないされています。

更新:RC2でサポートされていないRC1コードで、奇妙なパターンを使用していたようです。 Configure()メソッドからいくつかの追加パラメータを削除した後、もう一度.netコア起動コードによって呼び出されました。

+0

私はあなたのスタートアップの設定方法を見てみたいと思い、そのサービスに注意してください.AddInstanceがに変更されました。rc2のAddSingletonは、IConfigurationをConfigureメソッドに注入する必要はありません。Startupコンストラクタのプロパティとして永続化する必要があります。次にConfigureメソッド –

答えて

2

をすでに問題を修正しているように見えますが、configureメソッドに関して制限がハードと高速あなたが提案するようではありません。

制限は、あなたが開発は、環境名、または環境固有のconfigureメソッドが存在しない場合に使用されるConfigureという名前のメソッド、公共、インスタンスまたはConfigureDevelopmentという名前の静的メソッドを、持っている必要があります。

明らかに、あなたはそれがあなたのStartupクラスに設定されますが、あなたが何か他のものに注射を(必要があり、ConfigureServicesでそれを設定した場合、あなたが行うことができますようConfigure方法へのあなたのIConfigurationを注入する必要はありませんそう。たとえば、次のように完全に有効になります。参考

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddSingleton<ISuperSecretClass, SuperSecretClass>(); 
} 

public void Configure(IApplicationBuilder app, ISuperSecretClass instance) 
{ 
    //do something with instance 
} 

、私はConfigure制限についてthe StartupLoader sourceでチェック。

+0

私は1つ持っていましたが、余分な "ISomething"パラメータがあり、これはasp.netコアが見つからないようにするように思えました。私は "ConfigureDevelopment"について知らなかったので、この答えは素晴らしいです。 –

1

あなたが行うことができますConfigurationインスタンスを注入する場合:

services.AddSingleton((provider)=> 
{ 
    return Configuration; 
}); 
+0

のプロパティにアクセスできます。通常これは必須ではありません。問題は、無効なシグネチャのためにStartup.Configure()メソッドをビルドしてコンパイルできないことです。これにより、警告が表示されず、ランタイムエラーが発生した.netコアアプリケーションが破損します。 –