What is the Managed Extensibility Framework (MEF)? [closed] - definition

I googled and got only a few articles about MEF. Would someone please explain in brief:
What is the Manage Extensibility Framework?
For what purpose is it needed?
How can I start working with it?
Any step by step guidance will be helpful, thanks!

MEF allows you to design a system that can be extended.
In my experience, you can design interfaces, create libraries that have implementations of those interfaces, and load them dynamically at runtime.. You can also determine how those extensions should be loaded - in the same application domain, or a new one, etc. You can point it at a directory and tell it to get all of the implementations of a certain interface, and load those to use in your application..
So, because your application doesn't need to know all of its features up front and can load them dynamically, you can say it is "extensible"..
Alternatively, there is also MAF, the Managed Add-in Framework, or the System.AddIn namespace in .NET. This has some overlap, but is more targeted toward an Add-In or Plug-in model. It has features for managing versioning, and handling backward compatibility between hosts and add-ins each with different versions of the interface.
To get started with MEF, I think the best place is probably here : http://www.codeplex.com/MEF
There is a lot of information there on getting started, documentation, and even a forum...

Related

What is the Open-source equivalent of WebAPI? [closed]

In the past I've done some WebAPI http service development on Microsoft platform (both Asp based and self-hosted)
Now I'm beginning to learn how to do Web development outside of Microsoft platform.
My question is: what is the open-source equivalent of WebAPI?
Specifically, how does one create a back-end part of a Web application, featuring multiple Controllers (or similar constructs) , where each Controller has its own set of CRUD operations.
For example, with WebAPI I would create a CustomersController, a ProductsController, an OrdersController, and each one would have GET, POST, DLETE and PUT operations for their respective domain model. All these Controllers would exist within the same Web application.
So, I'm looking for a way to create such application using open-source stack.
First of all: WebAPI is indeed open source (see http://aspnetwebstack.codeplex.com/). But if you want to "deploy outside of Microsoft platform": Do you want to stick with .NET?
If you want to stick with .NET, then I can recommend ServiceStack. But you should look at their license model first. AFAIK they have changed from MIT license to something different. Don't know if it can still be used for commercial projects.
If you want to change your programming language: Take a look at Scala. I just switched from C# to Scala and I love it. It runs in the Java Virtual Machine (hence almost everywhere), but is much nicer and more powerful than Java (in my opinion). For Scala there is for example Spray as full fledges web service backend architecture.
Another bet would be PHP. Done it a long time, too. I for myself do not like it so much, but many big websites are build with PHP anyway. The two big players that I have in mind are symfony2 and Zend Framework 2.
Of course there are many other possible alternatives.
Hope this helped a bit...
IMO the thing that comes closest to ASP.NET Web API (from the feature focus point of view) is Nancy.
http://nancyfx.org/
I like it a lot!
Well, after looking into a number of back-end Http service options, the most compelling to me is Node.js. For the front-end AngularJS appears to be a great option to try.
My reason for looking into all of this was to get started developing Web applications totally outside of Microsoft platform (which is what I do at work).
So, for the time being, I'm willing to give the MEAN stack a shot and see what develops.
Thanks everyone for helping me!
-Eugene

How well would MvvmCross and CSLA.net work together in a multi-platform strategy (ASP.NET MVC, WP, WPF, WinRT, Win8, Android, iOS)

Long time lurker, first time questioner here :)
I have been looking into our company's next software system architecture. We have been using CSLA.net, to some extent, as our business object framework and are thinking of building our new architecture around it. CSLA.net has support for the platforms mentioned in the title and we are looking for mvvm framework that would work well with it.
At the moment we only support windows environments but are also looking to support at least Android and iOS (also mono in general is under consideration). We are looking to share as much of the code as possible between the platforms and MvvmCross seems like really nice piece of mvvm (+) framework, especially in that context. I have watched few n+1 videos and what I have seen so far has been very impressive. I also like the Stuart's style of introducing the framework and concepts around it.
Has anyone tried to build a cross platform application that uses both of these frameworks (CSLA.net and MvvmCross)? If yes, what have been your experiences like? Also if Stuart could comment on the issue of how to merg the viewmodels of the two frameworks. I remember Rocky (Rockford Lhotka) recommending, as a general tip when working with mvvm frameworks, to inherit CSLA.net viewmodelbase(not viewmodel) and implement also mvvm framework's requirements into that class. You can find source of the viewmodelbase from https://github.com/MarimerLLC/csla/blob/master/Source/Csla.Xaml/ViewModelBase.cs.
Any input would be much appreciated.
Regards,
Harri
ps. I think, that this would make a great n+ video. Wouldn't it ;)
I've personally never used CSLA, but I have talked with it's original author, Rocky, both by email and in person.
CSLA presents itself as a business model object layer and that it can very successfully interoperate with independent Mvvm frameworks - see Rocky's post on CSLA+Mvvm
MvvmCross provides the more application and UI level support - and leaves application authors free to choose how they write their business services and models.
Because of this, yes I think it should be possible and even straight-forward to use both of the frameworks together if you want to. To get started, it might be useful to write some prototypes - and perhaps to look at the way other integration has been done - e.g. CSLA+Caliburn integration
ps. I think, that this would make a great n+ video.
I'd much rather see this type of article from someone who understands and uses CSLA. I would encourage all members of the MvvmCross community to contribute their own blog posts, articles, videos and github samples.
One caveat to this advice: I don't know if CSLA support Portable Class Libraries - if it doesn't then you'll probably need to use file-linking rather than PCLs in your app
Yes, you can use a multitude of MVVM frameworks; I've used CaliburnMicro and our own custom MVVM with success. If you haven't checked out Rocky's eBook series, you should definitely do so. One of the big gotchas is the limitations on reflection in Silverlight, hence also in WP8 and WinRT, so some reading up on that is well-advised.
Regarding Portable Class Libraries, you can't those for CSLA business objects (they require more stuff than is available in PCLs), so you do have to do the project linking. Typically, write the complete class in the .NET libary w/ pre-compiler directives, such as
#if !SILVERLIGHT
around code that can't be complied for Silverlight/WP8. I do use PCLs for some basic stuff, like enums and constants, but not for the business classes.
Xamarin have just released some updates that mean the latest framework 4.5 with async features can shortly be implemented...

When using a DI framework, how does a new service know what other services are available?

In a large project that is using a DI framework (such as Ninject in my case), what options exist when implementing a new "service" to find out what other "services" are available to be used as dependencies. Before using DI I have noticed a tendency in our code base to get a reference to a "god" object that pretty much gave access to all the available functionality and then Visual Studio's IntelliSense would become very helpful to discover what all was available (obviously this approach was only possible because of poor architectural decisions of having such an object in the first place).
I can some possible answers and am interested what has worked for others:
You should know the overall system you are working in well enough
to know what other classes/services exist (for example, if I had
static classes I would just have to know that they exist to be able
to use them).
You maintain good external documentation of your
code base so all classes/services are understand by all developers
(this imposes a large documentation burden, it would seem to me).
Create an API to query the DI container (Ninject kernel) for a list
of all bindings to see what services are available (perhaps only
Singletons). This could also be done as part of the build system to
generate a document automatically upon each build that developers
could reference.
Has this ever been an issue for other developers?
Usually you don't want to see all services exist in a system and then choose one of them. You want to access a functionallity. Structure your classes with namespaces in a way so that it is obvious where to look for it.
E.g. If I want to know what collections are available in .NET I type System.Collections.Generic. and the IntelliSense gives me a list of options.
I tend to organise my codebase so that I have a central 'Interface' project to which all other projects have a reference. Then my Logger is available only through the ILogger interface, and the logging module can choose which concrete ILogger to provide. You should not be requesting concrete classes - this defeats the purpose of DI.
In general when you are implementing a new service you should already know what dependencies you need. If you don't know what you should use, ask someone who does. This is the equivalent to having adequate documentation - relying on intellisense will give you a very shallow idea of what you should take as a dependency. Instead you should consult either the documentation or someone who understands the area.

Lightswitch evaluation and questions

There seems to have a buzz around the Lightswitch application framework.
Reading some posts/forums/articles and listening to a video provdided some answers, but raised some others.
Extensibility?
Is there several hooks to override or extend features?
Modularity? Can MEF/Prism be integrated? Is there a concept of dynamic modules that can be loaded at runtime?
Localizable? Any special features about localization in different languages?
Versionnable? Any concept of version so simultaneous version can co-exist?
Abstraction? The connection to data source can be abstracted and replaced?
Testability? Are the different components unit testable in an automated way? Easy or difficult to achieve?
Cross-cutting / NFR ? Any hooks so we can plug NFR code? (logging, caching, audit, secuity )
Is this a solid framework to build some PAAS application over?
Extensibility? When the built-in LS controls don't allow you to do what you need, you can use just about any Silverlight control (including 3rd party controls), or create your own custom Silverlight controls. There is a little more work to do than using LS controls, because the LS controls have some extra "smarts" built into them, so you can just drop them on a screen, bind, & use them. There are also extensibility points built into the framework that allows you to create your own "extensions" (shells, controls, themes etc).
Modularity? LS already uses MEF under the covers, so it's quite possible that it may be able to be leveraged further in the future. LS does generate code, but for itself, not for external consumption. There is an excellent article, however, by Microsoft's Eric Erhardt
http://blogs.msdn.com/b/lightswitch/archive/2011/04/08/how-do-i-display-a-chart-built-on-aggregated-data-eric-erhardt.aspx
that shows how to reuse the data model that LS constructs (in Eric's case, he uses it to create a RIA service that aggregates data for presentation in a chart control).
Localizable? I don't believe there are currently any built-in localisation features.
Versionable? For a web-based app, if the data schema didn't change, I don't see why you couldn't publish separate versions, but desktop (OOB) apps are click-once apps & are therefore governed by that technology.
Abstraction? If you were to create a RIA service for your data source, you could abstract away the implementation details.
Testability? Unfortunately, V1 was not written with "testability" in mind. If you extract out your business logic into Silverlight class libraries (for use on the client, or full .NET class libraries for use on the server), you can unit test that logic, but the code that you write in an LS application itself is not really unit-testable at this point in time.
Let me give you my 2 cents based on an eval I just did:
Extensibility
You can of course add custom controls and apparently there will be a published extensability API.
Modularity
No. Lightswitch is not a code generator, it abstracts out implementation of the UI.
Localizable
Did not see anything, but I imagine this will occur in stages.
Versionnable?
You could TFS the Lightswitch project, but if you mean versioning from an execution standpoint ... it's as simple as deploying a new version of the app to the server. The client will check for updates on run and install as necessary from what I understand.
Abstraction
Yes, if you abstract it at the WCF RIA Services layer which is very easy to do.
Testability
Business rules can be implemented at the RIA Services layer so testing there should be a snap, but if you rely heavily on rules driven through the UI you will have to use another UI-based testing tool.
Cross-cutting / NFR
If you focus on getting the RIA Services tier of the app to be the central location for business rules and let the UI just focus on user experience you won't run into much overlap. I think Lightswitch is a good client for many solutions, but the core power of it is using it as a client for RIA Services which itself is not dependent on Lightswitch by any stretch.
I hope I at least provided some useful insight.

Servlets vs MVC frameworks [closed]

I very often come across this question of why we have got lots of web frameworks addressing the same or similar drawbacks.
When looking deeply, I also have given thought on why JSP / Servlets is not being used after the other web frameworks (like Struts, Spring MVC etc) have shown their existence?
Is it because, the latest web frameworks
does most of the things on its own?
provides extensive features that is not available with Servlet / JSP?
or the Servlet / JSP is impotent to deliver what latest framework does?
Any help in the form of responses or resources is greatly appreciated.
I will share some of my thoughts on this.
As said above these frameworks are developed on top of Servlet/JSP.
They are meant to avoid duplication of code (DRY).
Framework are based on Design Patterns - general reusable solution for a commonly occurring problems.
They help communicate the things easily across the team and make them productive and focused on the enterprise level problem they are trying to solve than these common tasks.
They help in speeding up the development by providing general solution to commonly well known problems. (e.g. form validation, REST, testing, dependency injection etc.)
When you are developing large scale enterprise app and have multiple developers working on it, you definitely needs some uniformity across the project/code/structure each developer is writing. The enforcements forced externally are not reliable, but when those are in built it helps to make the project to be easy to maintain, scale and easy for new people to be productive with it within short time.
I believe this rule applies not just for servlet-jsp but for JavaScript as well. Just native JavaScript or even low level JavaScript API/Libraries are not enough when building an enterprise scale UI. Either adopt the Best available Framework or abstract out common nature and make it a framework (not library).
Spring MVC still works with JSPs and in its core it provides nothing more than a simple dispatcher servlet that uses the mechanisms provided by the Spring MVC framework (where you register your controllers in etc.). I would say it is about convenience and making things a lot easier to write and maintain. Additionally you can react more easily to current developments (e.g. RESTful services... you would have to code all of it by hand in a servlet). In the end that is what frameworks are for.

Resources