【问题标题】:Ninject Custom Inject AttributeNinject 自定义注入属性
【发布时间】:2010-11-12 21:05:27
【问题描述】:

有人可以告诉我如何使用 Ninject 创建自定义“Inject”属性吗?

我想做以下事情:

  • InjectView - 自定义“注入”属性

当要注入具有此属性的属性时,注入的值将从“ViewManager”类加载。

我找到了一个使用 ISelector 的示例来决定是否要注入属性/字段,但是我不知道如何为此添加自定义“注入策略” - 我想委托实际的注入我的 ViewManager 的价值。

【问题讨论】:

    标签: attributes ninject inject


    【解决方案1】:

    它已经被支持并且可以通过简单的内核配置来完成。

    new StandardKernel(new NinjectSettings() { InjectAttribute = typeof(MyOwnInjectAttribute) };
    

    【讨论】:

    • 问题是它只支持更改用于注入的属性。我想要的是每个具有此属性的属性都将从“特定提供者”获取值,并且我还需要在决定注入什么值之前访问该属性。例如: [InjectViewRegion(Id = Infrastructure.ViewRegions.Login)] private IViewRegion LoginViewRegion { get;放;注入此属性的值时,我想访问 InjectViewRegion 属性,以及为指定的“Id”注册的视图区域。再次感谢!
    【解决方案2】:

    我通过添加一个自定义 IInjectionHeuristic 解决了这个问题,它允许通过我的自定义属性进行注入。然后我还添加了一个自定义 IBindingResolver,它为每个已解析的类型添加了一个附加绑定 - 此绑定对自定义属性进行条件检查,因此它不会破坏任何先前的绑定...

    自定义 IBindingResolver 创建的绑定设置一个本地“ProviderCallback”,它利用提取的属性并将请求传递给内部 ViewRegionManager 实例。

    希望这对将来有人想做类似的事情有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多