Git Product home page Git Product logo

mvvmcross-plugins's Introduction

MvvmCross-Plugins

MvvmCross provides a plugin system to allow developers to provide IoC-injectable functionality at run-time.

This functionality can include both portable and platform-specific code, and can easily be substituted for mock implementations during tests.

Plugins are really just a layer on top of MvvmCross's IoC/Service Resolution implementation - they use a filename-based convention to make it easier to share cross-platform blocks of functionality.

For more background on the MvvmCross IoC and Service Resolution APIs, see Service Location and Inversion of Control.

See the Readme.md file of each plugin for more details about that plugin

Questions & support

Documentation and Examples

The MvvmCross-Samples repo contains the latest samples. See the MvvmCross Wiki for additional articles and information.

FAQ: Why use lots of small plugins?

This question is asked quite frequently.

Why does MvvmCross contain lots of small plugins rather than just including the functionality within the core package? I quite frequently hear the (valid) complaint that Mvx would be easier to use if there weren't so many individual assemblies to reference and so many namespaces to use.

The motivation for using lots of separate small modules for this is partly to do with good software architecture, and partly to do with performance.

On the architectural side, providing small self-contained (tightly-coupled) plugins as individual modules makes them easier to write, easier to modify, easier to test and easier to replace.

On the performance side, making the plugins optional means that less unnecessary code is required in apps both at build time and at startup time. If an app doesn't need a module - for example, geo-location - then it simply doesn't reference that plugin.

As for the main complaint - about the referencing of so many assemblies - I do agree that the need to reference additional plugins can make 'getting started' with MvvmCross more difficult than the v1 of MvvmCross where all plugin-type functionality was baked into a single assembly for each platform. However, I hope this difficulty can be lessened through the use of package managers like nuget and the Xamarin component store, and I believe that once over the 'getting started' hump, then the plugins deliver significant benefits which were worth any initial pain.

Further, because MvvmCross itself is so heavily based on replaceable, extensible plugins, I hope that this will encourage others to author, modify and share additional components and extensions, and that these components will be shareable with other platforms beyond MvvmCross.

Contribute!

Some of the best ways to contribute are to try things out, file bugs, and join conversations.

If you would like to help make MvvmCross even better, then please do:

  • new code - including pull requests via GitHub - or you can fork the project and build your own extensions
  • new plugins - can be hosted in the MvvmCross-Plugins repository
  • please do blog about your adventures with MvvmCross - we're currently light on documentation!
  • if you use the framework, then please let me know - we love to see what people are doing with it

Acknowledgements

  • Thanks to benschi11 for the SQLite-PCL plugin

Licensing

MvvmCross is licensed under the MS-PL License

mvvmcross-plugins's People

Contributors

slodge avatar martijn00 avatar cheesebaron avatar lothrop avatar hollywoof avatar guillaume-fr avatar stoneman avatar giorgi avatar steveydee82 avatar benschi11 avatar gentledepp avatar tofutim avatar laumania avatar danielcweber avatar velocitylabs avatar ggirard07 avatar dragon160 avatar vincentdaude avatar usami-k avatar shawinnes avatar seancross avatar mgjhl avatar promontis avatar kjeremy avatar hlogmans avatar ddunkin avatar zhangzihe avatar toolboc avatar pcmichaels avatar jsmarcus avatar

Watchers

James Cloos avatar Chris Thomas avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.