Pan*_*ood 8 wpf xaml dependency-injection
我有一个IValueConverter实现的类,我需要使用我的DI容器(Ninject)注入它.
问题是,在XAML中,没有立即明显的方法来控制Converter对象的实例化.
所以我的XAML包含这样的行:
Source ="{Binding Path = CurrentMessage,Converter = {StaticResource ImagePathConverter}}"
在哪里,将为我创建ImagePathConverter.
我想我可以创建一个"服务定位器"静态类,并调用它来解决我的依赖,改变静态资源的财产"MyServiceLocator.TheImageConverter",但是这让我想呕吐.
我希望这个问题可以通过一些专门针对所提供代码的代码片段来回答 - 也许是一个示例的支持链接.不仅仅是建议看看某个地方.
另外,非常重要的是,假设XAML 没有代码隐藏 - 而且我不能使用它.我正在创建一个皮肤,不希望背后的代码.所以我不能在类构造函数中设置一个类变量并引用它.也许那是不合理的,我还不确定.
处理此问题的常用方法是将转换器也设置为MarkupExtension
.那是:
public class MyConverter : MarkupExtension, IValueConverter
Run Code Online (Sandbox Code Playgroud)
您的ProvideValue()
方法可以返回转换器的实例,从而允许您像这样使用它:
Source="{Binding CurrentMessage, Converter={local:MyConverter SomeParameterToConverter}}"
Run Code Online (Sandbox Code Playgroud)
这与DI无关,但它确实满足了消除背后代码的要求.我真的没有看到在您的DI容器中注册转换器的意义.
归档时间: |
|
查看次数: |
8683 次 |
最近记录: |