c# - RegisterType with EventAggregator and ViewModel -


i not understand how register ieventaggregator instance can inject viewmodel.

example:

i define mainviewmodel:

... private ieventaggregator _eventaggregator;  public mainviewmodel(ieventaggregator eventaggregator) {     _eventaggregator = eventaggregator;     ... } ... 

then, need somehow register class implements ieventaggregator want inject in viewmodel.

in moduleinit class, have this:

... private iunitycontainer _container;  public moduleinit(iunitycontainer _container) {    _container = container; } ... public void initialize() {    container.registertype<ieventaggregator, ___(something)___>();    ... } 

in mainviewmodel class, can implement _eventaggregator = servicelocator,current.getinstance<ieventaggregator>();, don't understand conceptually i'm doing. program works...

i understand servicelocator doing, , should doing appropriately register type container. don't define class implements ieventaggregator, servicelocator getting instance? , have register when resolve something, viewmodel, create new eventaggregator instance?

eventaggregator:

the prism library has default eventaggregator can use. located in microsoft.practices.prism.events if use prism < 5.0 or in microsoft.practices.prism.pubsubevents if use prism >= 5.0

also, if use unitybootstrapper fromunityextensions, suspect since using modules, build in services (including eventaggregator) in prism registered you:

class mybootstrapper : unitybootstrapper {     protected override void configurecontainer()     {         // base.configurecontainer setup build in prism services         base.configurecontainer();          //register own stuff     } } 

servicelocator:

the servicelocator static wrapper, contacts current instance of iunitycontainer resolve. should never use servicelocator fetch resolves, unless there no possible way to otherwise (e.g. in static constructor). pattern called the service locator pattern, , not appreciated.

unitycontainer:

the container's job create instances of whatever class registered specific interface, monitor lifetime, , reuse instances if specified. when register:

container.registertype<ieventaggregator, eventaggregator>(); 

...you instruct container return instance of eventaggregator, when class constructor has parameter of type ieventaggregator.

however if wish single instance of registered class, need specify lifetime manager: containercontrolledlifetimemanager, so:

... , eventaggreagator>(new containercontrolledlifetimemanager()); 

this instructs container reuse same instance every time is requested. default lifetime manager when using registertype transientlifetimemanager instruct container create new instance every time.

note: if use registerinstance @ point, note default lifetimemanager containercontrolledlifetimemanager, not transient.

further reading:

i suggest read on dependency injection , inversion of control, trying do. maybe tutorial of how prism works.

cheers


Popular posts from this blog

c# - ODP.NET Oracle.ManagedDataAccess causes ORA-12537 network session end of file -

matlab - Compression and Decompression of ECG Signal using HUFFMAN ALGORITHM -

utf 8 - split utf-8 string into bytes in python -