我正在编写一些 asp.net 自定义服务器控件,并寻找有关如何注入控件所需的依赖项的最佳实践。
在决定如何做到这一点时,我考虑了几个因素:
1)通过标记注入这种依赖关系有多容易。
2)通过代码隐藏注入这种依赖关系有多容易。
3) 此注入必须在控件生命周期中尽早进行,最好控件应在 OnInit() 中提供其所有依赖项。
基于这些因素,我能想到的唯一方法是在控件上有一个字符串属性,该属性将具有依赖项的完全质量类型。一旦控件初始化,它就可以加载该类型并执行它需要执行的操作。
示例:
public class MyControl : CompositeControl
{
public string RepositoryType { get; set; }
protected IRepository Repository { get; set; }
protected override void OnInit()
{
EnsureChildControls();
}
protected override void CreateChildControls()
{
if (!ChildControlsCreated)
{
Repository = ComponentFactory.Instanciate(RepositoryType);
}
}
}
我一直遇到这种情况,想知道是否有人想出另一个/更好/不同来注入依赖项。
谢谢 :)