Ich möchte IoC-Container mithilfe von ASP.NET-Webformularen implementieren.IoC-Container funktioniert nicht auf WebForms
Ninject
undNinject.Web
ddlpublic class Global : NinjectHttpApplication
erstellen
Kernel
public override IKernel CreateKernel() { IKernel kernel = new StandardKernel(new Module.Module()); return kernel; }
erstellen
installieren 012: Ich bin diese Schritte abgeschlossenModule
public override void Load() { Bind<IMetricService>().To<MetricService>(); }
Inject Verwendung auf
Page
public partial class _Default : Page { [Inject] private IMetricService metricService; protected void Page_Init(object sender,EventArgs e) { metricService = new MetricService(metricService); } protected void Page_Load(object sender, EventArgs e) { metricService.GetAllMetrics(); } }
Und das ist meine MetricService
Klasse
public class MetricService : IMetricService
{
[Inject]
private IMetricService _metricService;
public MetricService(IMetricService metricService)
{
this._metricService = metricService;
}
public void GetAllCriteria()
{
_metricService.GetAllCriteria();
Console.WriteLine("metric service");
}
}
Wie ich verstehe, wenn die IMetricService
in MetricService
Konstruktor der Container IoC passieren muss diese MetricService
binden Klasse. Ich denke, mein Fehler ist allgemein, aber ich kann nicht verstehen, wo.
Die Idee von DI ist, so dass Sie nicht haben, hängen von Konkrementen, in Ihrem Pageinit Sie sind newing up eine Abhängigkeit? – Magrangs
In ** PageInit ** was muss ich tun? –
Zuerst metricService = new MetricService (metricService) loswerden; Der Container liefert Ihnen die richtige Instanz. – Magrangs