私はAspNet Core 1.0 RTMで構造マップを使用しています。プロパティのFromServices属性を使用して削除したようです。これで、ClaimsPrincipalをインジェクトできなくなったため、以下のコードが破られます。 DIシステムでこのプロパティを取得する方法がわかりません。カスタムInputFormatterなどを作成する必要がありますか?これはもう一度これを働かせるための多くの仕事のように思えます。私の知る限り自演としてAspNet Core RC1 - > RTM DI変更 - FromServicesを削除
Startup.cs
public class Startup {
public IServiceProvider ConfigureServices(IServiceCollection services) {
var container = new Container();
container.Configure(i => {
i.For<IHttpContextAccessor>()
.Use(new HttpContextAccessor());
i.For<ClaimsPrincipal>()
.Use(x => x.GetInstance<IHttpContextAccessor>().HttpContext.User);
});
container.Populate(services);
return container.GetInstance<IServiceProvider>();
}
}
Model.cs
public class Model {
//[FromServices] <-- worked in RC1
public ClaimsPrincipal Principal { get; set; }
public string Value => Principal.Identity.Name;
}
TestController.cs
public class TestController : Controller {
public IActionResult Test(Model model){
return Ok();
}
}
あなたは、モデル内の依存関係が必要な場合は、アーキテクチャの問題を抱えているし、あなたのデザインを再考する必要があります。モデルは依存関係を持つべきではなく、プロパティインジェクションは依存関係を隠す可能性があり、テストとエラートラッキングは悪夢になります。プロパティインジェクションは、作成したオブジェクトのコントロールがないまれなコーナーケース(コンストラクタインジェクションを使用する方法がないところで作成されたWCFサービスプロキシ)でのみ使用されます。 – Tseng