Ich verwende Strukturkarte mit dem AspNet Core 1.0 RTM. Offenbar wurden sie mithilfe des FromServices-Attributs für Eigenschaften entfernt. Dies bricht den folgenden Code, da ich jetzt das ClaimsPrincipal nicht injizieren kann. Ich bin mir nicht sicher, wie ich das DI-System dazu bringen soll, diese Eigenschaft aufzunehmen. Muss ich einen benutzerdefinierten InputFormatter oder etwas anderes erstellen. Das scheint eine Menge Arbeit zu sein, um das wieder zum Laufen zu bringen.Asp.Net Core RC1 -> RTM DI Änderungen - Removed 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();
}
}
Wenn Sie Abhängigkeiten in Ihrem Modell benötigen, können Sie architektonische Probleme haben und müssen Ihr Design zu überdenken. Modelle sollten keine Abhängigkeiten aufweisen, und die Eigenschafteninjektion wird wahrscheinlich Abhängigkeiten verbergen, was das Testen und die Fehlerverfolgung zu einem Albtraum macht. Die Eigenschafteninjektion wird nur für seltene Fälle verwendet, in denen Sie keine Kontrolle über das erstellte Objekt haben (z. B. WCF-Dienstproxys, die erstellt werden, wenn Sie keine Möglichkeit haben, die Konstruktorinjektion zu verwenden). – Tseng