我知道这是一个愚蠢的错误,但我无法弄清楚发生了什么.我已经创建了一些扩展方法,并尝试访问它们,但默认方法不断被调用:
namespace MyProject
{
public static class Cleanup
{
public static string cleanAbbreviations(this String str) {
if (str.Contains("JR"))
str = str.Replace("JR", "Junior");
return str;
}
public static bool Contains(this String str, string toCheck)
{//Ignore the case of our comparison
return str.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
}
public static string Replace(this String str, string oldStr, string newStr)
{//Ignore the case of what we are replacing
return Regex.Replace(str, oldStr, newStr, RegexOptions.IgnoreCase);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我不明白我们如何注册一个IEventAggregator实例,所以我们可以将它注入一个实例ViewModel.
例:
我定义了我的MainViewModel:
...
private IEventAggregator _eventAggregator;
public MainViewModel(IEventAggregator eventAggregator) {
_eventAggregator = eventAggregator;
...
}
...
Run Code Online (Sandbox Code Playgroud)
然后,我需要以某种方式注册一个实现IEventAggregator我想要注入的类ViewModel.
在我的ModuleInit班上,我会有这样的事情:
...
private IUnityContainer _container;
public ModuleInit(IUnityContainer _container) {
_container = container;
}
...
public void Initialize() {
container.RegisterType<IEventAggregator, ___(something)___>();
...
}
Run Code Online (Sandbox Code Playgroud)
在我的MainViewModel班上,我也可以实现_eventAggregator = ServiceLocator,Current.GetInstance<IEventAggregator>();,但我从概念上并不真正理解我在做什么.该计划正常运作......
我真的很想了解ServiceLocator实际上在做什么,以及我应该做些什么来适当地使用我的容器注册一个类型.我没有定义类的实现IEventAggregator,那么ServiceLocator获取实例的位置是什么?然后我必须注册什么才能当我解决某些问题时,就像我一样ViewModel,它会创建一个新EventAggregator实例?
我正在尝试替换文字.我正在使用字典来完成任务.
public static string cleanString(this String str) {
Dictionary<string, string> dict = new Dictionary<string,string>();
dict.Add("JR", "Junior");
dict.Add("SR", "Senior");
foreach (KeyValuePair<string,string> d in dict) {
if (str.BlindContains(p.Key)) {
str = str.BlindReplace(str, p.Value);
}
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
BlindContains和BlindReplace只是忽略替换的情况(并且BC确保字符串不是另一个单词的一部分):
public static bool BlindContains(this String str, string toCheck)
{
if (Regex.IsMatch(str, @"\b" + toCheck + @"\b", RegexOptions.IgnoreCase))
return str.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
return false;
}
public static string BlindReplace(this String str, string oldStr, string newStr)
{
return Regex.Replace(str, oldStr, newStr, RegexOptions.IgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)
问题 …