求WebForm版构造函数注入例子~新年快乐~
求WebForm版构造函数注入例子~新年快乐~
求WebForm版构造函数注入例子~新年快乐~如题~
求WebForm版构造函数注入例子~新年快乐~
求WebForm版构造函数注入例子~新年快乐~如题~
解决方案 »
- 大家好,关于这个计时器,这样做好吗
- 很急的问题
- DATAGRID 关于删除记录问题
- 关于Win2003server+IIS+.NET2.0的问题-----在线急
- 连数据库的问题 没有错误就是连不上 请那为大哥帮帮忙
- Dell本本被锁
- 谁能帮我看下这个问题啊?
- 水晶报表中饼形图不显示,急!急!!急!!!(只有30分了)
- 文件上传下载的更进一步考虑问题。请高手指教!!!
- ■■■(菜鸟问题,只要高手留一句话)弄(ASP)ASP.NET用什么软件?■■■
- ASP.net从TreeView动态添加自定义节点没问题,但是在回传处理的时候报类型错误
- 有没有什么方法执行完服务器端的代码将执行结果返回给客户端呢?
嗯 必须提供没有参数的构造函数
private T _interface
public ctor()
{
_interface=Ioc.Get<T>
}我现在是这样实现的,不知道好不好~
下面的例子是用 HttpModule/CustomAttribute/Windsor 实现的注入
// index.aspx.cs
public partial class IndexPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Logger.Write("page loading");
} [Inject]
public ILogger Logger { get; set; }
} // WindsorHttpModule.cs
public class WindsorHttpModule : IHttpModule
{
private HttpApplication _application;
private IoCProvider _iocProvider; public void Init(HttpApplication context)
{
_application = context;
_iocProvider = context as IoCProvider; if(_iocProvider == null)
{
throw new InvalidOperationException("Application must implement IoCProvider");
} _application.PreRequestHandlerExecute += InitiateWindsor;
} private void InitiateWindsor(object sender, System.EventArgs e)
{
Page currentPage = _application.Context.CurrentHandler as Page;
if(currentPage != null)
{
InjectPropertiesOn(currentPage);
currentPage.InitComplete += delegate { InjectUserControls(currentPage); };
}
} private void InjectUserControls(Control parent)
{
if(parent.Controls != null)
{
foreach (Control control in parent.Controls)
{
if(control is UserControl)
{
InjectPropertiesOn(control);
}
InjectUserControls(control);
}
}
} private void InjectPropertiesOn(object currentPage)
{
PropertyInfo[] properties = currentPage.GetType().GetProperties();
foreach(PropertyInfo property in properties)
{
object[] attributes = property.GetCustomAttributes(typeof (InjectAttribute), false);
if(attributes != null && attributes.Length > 0)
{
object valueToInject = _iocProvider.Container.Resolve(property.PropertyType);
property.SetValue(currentPage, valueToInject, null);
}
}
}
} // Global.asax.cs
public class Global : System.Web.HttpApplication, IoCProvider
{
private IWindsorContainer _container; public override void Init()
{
base.Init(); InitializeIoC();
} private void InitializeIoC()
{
_container = new WindsorContainer();
_container.AddComponent<ILogger, Logger>();
} public IWindsorContainer Container
{
get { return _container; }
}
} public interface IoCProvider
{
IWindsorContainer Container { get; }
}