Reputation: 391
I have this piece of code (or similar) in many of our views:
private IEventAggregator eventAggregator;
Constructor()
{
eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
...
}
I read from this post that ServiceLocator.Current can throw NullReferenceException (bad thing on a constructor) but I was wondering if the GetInstance<>() method can return null (or some other inconsistent object) making eventAggregator dangerous to use later in other methods.
NOTE: I'm quite new to MVVM and WPF
Upvotes: 2
Views: 11553
Reputation: 7719
If the servicelocator is null, then there is probably something not correctly setup for unity. under normal circumstances it shouldnt be an issue imho.
having said that, i tend to use a slightly different way to get to the servicelocator.
for instance, if i have a class called MyClass i will use unity dependency injection to pass the servicelocator in ( also referred to as the container in unity ). And I tend to use the Resolve functionality of unity rather than GetInstance, but they are the same.
There is also talk that the servicelocator is an antipattern, but i dont buy into that line of thinking. http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
example
public MyClass(IUnityContainer container)
{
var ea = container.Resolve<IEventAggregator>();
}
Upvotes: 1