ユーザーコントロールへの参照を挿入したいaspxページがあります。ユーザーコントロールは、別個のアセンブリに格納され、実行時にロードされます。ユーザーコントロールを挿入した後、コントロールはページのコントロールコレクションに読み込まれます。WebFormsにNinjectを使用してWebユーザーコントロールを挿入する
すべてが正常に動作しているようですが、ページにコントロールを追加する点が必要です。エラーはありませんが、コントロールのUIは表示されません。
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;
}
、ここで外部モジュールが他のアセンブリで定義されている方法です。
public class ExternalModule : NinjectModule
{
public ExternalModule() { }
public override void Load()
{
Bind<IView>().To<controls_MyCustomUserControlView>();
}
}
デバッガがオンロード、アプリが実行されたときにすることを示しています外部モジュールが呼び出され、依存関係がページに挿入されます。
public partial class admin_MainPage : PageBase
{
[Inject]
public IView Views { get; set; }
この時点で、ページにビュー(ここではユーザーコントロール)を追加しようとすると、何も表示されません。これはNinjectによってユーザーコントロールが作成される方法と関係しますか?ロードされたコントロールに空のコントロールコレクションがあるようです。 aspxページ内の
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..." });
、最後にビュー/ユーザーコントロール:を呼び出すことで、この作業を取得することができた
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyCustomUserControlView.ascx.cs" Inherits="controls_MyCustomUserControlView" %>
<asp:Label Text="Wow, what a view!" runat="server" />
誰かがMEFまたはSystem.Addinを提案する前に、私は既に試してみました。 – yanta