.net – 基于属性值的Ninject条件绑定
发布时间:2020-12-16 03:33:32 所属栏目:asp.Net 来源:网络整理
导读:我无法使用ninject定义绑定. 我在标准的ASP.NET WebForms应用程序中.我已经为页面和控件中的Inject依赖项定义了一个http处理程序(Property injection). 这是我想要做的: 我正在创建一个自定义组合框usercontrol.根据组合框中枚举的值,我希望能够在属性中注
我无法使用ninject定义绑定.
我在标准的ASP.NET WebForms应用程序中.我已经为页面和控件中的Inject依赖项定义了一个http处理程序(Property injection). 这是我想要做的: 我正在创建一个自定义组合框usercontrol.根据组合框中枚举的值,我希望能够在属性中注入一个不同的对象(我想要做的是比这更多的参与,但对此的回答应该足以让我走). 解决方法
基于属性值的条件绑定不是一个好的设计,甚至不可能(至少对于构造函数注入),因为依赖关系通常在接收它们的对象之前创建.如果以后更改房产怎么办?最好的方法是注入一个从Ninject请求实例的工厂或工厂方法,并在内部交换初始化和属性值更改的策略.
public enum EntityType { A,B } public class MyControl : UserControl { [Inject] public Func<EntityType,IMyEntityDisplayStrategy> DisplayStrategyFactory { get { return this.factory; } set { this.factory = value; this.UpdateEntityDisplayStrategy(); } } public EntityType Type { get { return this.type; } set { this.type = value; this.UpdateEntityDisplayStrategy(); }; } private UpdateEntityDisplayStrategy() { if (this.DisplayStrategyFactory != null) this.entityDisplayStrategy = this.DisplayStrategyFactory(this.type); } } Bind<Func<EntityType,IMyEntityDisplayStrategy>> .ToMethod(ctx => type => type == ctx.kernel.Get<IMyEntityDisplayStrategy>( m => m.Get("EntityType",EntityType.A)); Bind<IMyEntityDisplayStrategy>.To<AEntityDisplayStrategy>() .WithMetadata("EntityType",EntityType.A) Bind<IMyEntityDisplayStrategy>.To<BEntityDisplayStrategy>() .WithMetadata("EntityType",EntityType.B) 或者,添加激活操作并手动注入依赖项.但请注意,更改约束属性将导致状态不一致. OnActivation((ctx,instance) => instance.MyStrategy = ctx.Kernel.Get<MyDependency>(m => m.Get("MyConstraint",null) == instance.MyConstraint); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – 更改Asp.net Core中静态文件的标题
- ASP.NET Core Project.json文件(5)
- asp-classic – 服务器对象错误’ASP 0177:800401f3’Serv
- asp.net – 使用jetBrains dotTrace检测W3WP CPU问题
- asp.net – Response.IsClientConnected如何在幕后工作?
- asp.net – iis7中的windows身份验证
- 定期刷新局部视图(ASP.Net MVC)
- asp.net-mvc – 启动了Just-In-Time调试器,没有必要的安全权
- 什么时候最好在ASP.NET中使用静态函数?
- ASP.Net – AJAX UpdatePanel中的Javascript