injizieren Ich habe eine Aspx-Seite, die ich einen Verweis auf ein Benutzersteuerelement injiziert haben möchte. Das Benutzersteuerelement wird in einer separaten Assembly gespeichert und zur Laufzeit geladen. Nach dem Eingeben des Benutzersteuerelements sollte es dann in die Steuerelementauflistung der Seite geladen werden.ein Webbenutzer Steuerelement mit Ninject in WebForms
Alles scheint gut zu funktionieren, erwarte den Punkt des Hinzufügens des Steuerelements zu der Seite. Es gibt keinen Fehler, aber die Benutzeroberfläche für das Steuerelement wird nicht angezeigt.
global.asax.cs
protected override Ninject.IKernel CreateKernel()
{
var modules = new INinjectModule[] { new MyDefaultModule() };
var kernel = new StandardKernel(modules);
// Loads the module from an assembly in the Bin
kernel.Load("ExternalAssembly.dll");
return kernel;
}
und hier ist, wie das externe Modul in der anderen Baugruppe definiert:
public class ExternalModule : NinjectModule
{
public ExternalModule() { }
public override void Load()
{
Bind<IView>().To<controls_MyCustomUserControlView>();
}
}
Der Debugger zeigt, dass, wenn die Anwendung ausgeführt wird, die Last auf Das externe Modul wird aufgerufen, und die Abhängigkeit wird in die Seite eingefügt.
public partial class admin_MainPage : PageBase
{
[Inject]
public IView Views { get; set; }
An diesem Punkt, wenn versucht wird, die Ansicht (hier ein Benutzersteuerelement) der Seite hinzuzufügen, wird nichts angezeigt. Hat das etwas damit zu tun, wie die Benutzersteuerung von Ninject erstellt wird? Das geladene Steuerelement scheint eine leere Kontrollsammlung zu haben.
innen aspx Seite
var c = (UserControl)Views;
// this won't show anything. even the Control collection of the loaded control (c.Controls) is empty
var view = MultiView1.GetActiveView().Controls.Add(c);
// but this works fine
MultiView1.GetActiveView().Controls.Add(new Label() { Text = "Nice view you got here..." });
und schließlich die Ansicht/Benutzersteuerung:
public partial class controls_MyCustomUserControlView : UserControl, IView
{
}
Es enthält nur ein Etikett:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyCustomUserControlView.ascx.cs" Inherits="controls_MyCustomUserControlView" %>
<asp:Label Text="Wow, what a view!" runat="server" />
Bevor jemand MEF oder System.Addin vorschlägt, habe ich sie bereits ausprobiert. – yanta