2016-05-18 6 views
2

コントローラにプロパティ注入があることを確認する簡単な方法は実際にはありません。AutofacとASP.NET Coreを使用してコントローラにプロパティ注入を有効にする方法はありますか?

すべてのコントローラーを個別に登録することは、目的を少し破るようです。 [FromServices]属性はremovedであり、具体的には、個々のIoCコンテナに対応していることを確認してください。

わかりやすいものがありますか?利用可能なすべての拡張メソッドを探しましたが、問題とディスカッションフォーラムで何も見つかりませんでした。

+0

私はあなたがここで何かを欠いているとは思わない。これらの問題は[MVCチームに報告されました](https://github.com/aspnet/Mvc/issues/3727#issuecomment-210836460)、これまでMicrosoftはこれを無視しているようです。 – Steven

+0

@スティーブンそれは少し衝撃的な読書でした。それについて別の問題を提起する価値があると思いますか?私は技術的な詳細(ReleaseController +別のコンテナを持っている)を100%確信していませんが、ユースケース(私の場合)は非常にシンプルで、私のコントローラにプロパティインジェクションが必要です。 –

+0

私はMicrosoftに新しい問題を提起しても問題ありませんが、なぜあなたはプロパティインジェクションを必要としますか? – Steven

答えて

0

代わりにconstructor注射を使用することが好ましい。しかし、あなたがしなければならない場合はAutofac's標準プロパティ注入アプローチhereを使用することができます。すでに述べたように、FromServices属性はプロパティの挿入をサポートしていません。しかし、あなたはすでにAutofacを使用している場合、それは非常に単純でなければなりません:

再び
builder.RegisterType<MyController>().WithProperty("MyProperty", propertyValue); 

constructor注入を使用することで、フレームワークを戦っていないとして、私の意見で優れている、あなたは第三に頼る必要はありません。 -party IoC

public class BaseController : Controller 
{ 
    protected IDependency Value { get; } 

    public BaseController([FromServices] IDependency value) 
    { 
     Value = value; 
    } 
} 

このプロパティは、サブクラスで使用できるようになります。 DI and Controllersの詳細については、公式文書を参照してください。

+0

あなたの洞察をお寄せいただきありがとうございます。私はこれが可能であることは分かっていましたが、そうするのは明らかですが、私はマニュアル登録またはコンストラクタインジェクションのどちらも使用しないことを好みました。 –

関連する問題