gpt4 book ai didi

c# - 在 Ninject 中创建多个内核实例是一种不好的做法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:09 25 4
gpt4 key购买 nike

我有一个带有许多自定义服务器控件的 ASP.Net Web 应用程序。

不幸的是,Ninject could not inject dependency into CompositeControls .

我是 Ninject 的新手;以下是我解决问题的简单方法。

因为我有很多自定义服务器控件,所以我最终会创建多个 StandardKernel 实例。

这是一个糟糕的设计吗? 如有错误请指正。谢谢!

public interface ICalculate
{
int Add(int x, int y);
}

public class Calculate : ICalculate
{
public int Add(int x, int y)
{
return x + y;
}
}

public class DemoModule : NinjectModule
{
public override void Load()
{
Bind<ICalculate>().To<Calculate>();
}
}

public class MyServerControl : CompositeControl
{
private TextBox TextBox1;
private TextBox TextBox2;
private Label Label1;

public ICalculate Calculate { get; set; }

public MyServerControl()
{
IKernel kernel = new StandardKernel(new DemoModule());
Calculate = kernel.Get<ICalculate>();
}

protected override void CreateChildControls()
{
TextBox1 = new TextBox{ID = "TextBox1", Text = "1"};
Controls.Add(TextBox1);

TextBox2 = new TextBox {ID = "TextBox2", Text = "2"};
Controls.Add(TextBox2);

var button1 = new Button {ID = "Button1", Text = "Calculate"};
button1.Click += button1_Click;
Controls.Add(button1);

Label1 = new Label {ID = "Label1"};
Controls.Add(Label1);
}

private void button1_Click(object sender, EventArgs e)
{
int value1 = Int32.Parse(TextBox1.Text);
int value2 = Int32.Parse(TextBox2.Text);

Label1.Text = "Result:" + Calculate.Add(value1,value2);
}
}

enter image description here

最佳答案

是的,创建 Ninject 内核的多个实例是不好的做法,因为创建和配置 Ninject 内核是一项非常昂贵的操作。在您的情况下,每次创建新控件时都会发生这种情况。

我认为,最好将 IKernel 设为静态字段,并将其用作 CompositeControl 中的 Service Locator 模式

UPD:它还不错,但它确实有效。

public class Global : NinjectHttpApplication
{
public static IKernel Kernel;

protected override IKernel CreateKernel()
{
IKernel kernel = new StandardKernel(new DemoModule());
return kernel;
}
}

public class MyServerControl : CompositeControl
{
public ICalculate Calculate { get; set; }

public MyServerControl()
{
Calculate = Global.Kernel.Get<ICalculate>(); // like service locator
}
}

关于c# - 在 Ninject 中创建多个内核实例是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com