Skip to main content

Posts

Showing posts with the label MEF

Using ASP.NET MVC with MEF

I wrote this post almost a year ago, but never published it for some reason. Anyway, here is a little MVC/MEF magic. By default a controller in MVC must have a parameterless constructor. When using MEF a good practice is to inject the services via constructor parameters. These two in combination obviously creates an issue where the following scenario will not work out of the box, since there is no parameterless constructor for  MVC  to use. Note that the PartCreationPolicy is set to NonShared since a new controller have to be initialized for each request. [Export] [PartCreationPolicy(CreationPolicy.NonShared)] public class HomeController : Controller {     private readonly IServiceClient _service;     [ImportingConstructor]     public HomeController(IServiceClient service)     {         _service = service;     }     public ActionResult Index()     {         ...

Proper initialize/dispose with WCF and MEF

Initialization and disposing of services in a WCF application is a bit of a hassle to control when running on an IIS instance, since the application starts and stops every now and then based on server requests. It doesnt make it easier when using an IOC, as in our case MEF. To have total control of the startup and shutdown events we began with adding a service factory to all our WCF services. <%@ ServiceHost Language="C#" Debug="true" Service="WcfService" Factory="CustomServiceHostFactory" %> When ever the application gets woke up by a request to any of the services, the service factory will be used to instantiate the service. This means we can add any logic to these methods to have full control of the WCF application initialization. Here is what a service factory class could look like. (Composition is a static class containing a reference to the MEF container) public class CustomServiceHostFactory : ServiceHostFactory { priva...

Quartz.NET and MEF

I have been implementing a scheduler service for several different jobs on several difference schedules, which led me into using Quartz.NET . This is a really nice framework, but since we're using MEF I ran into some issues. Quartz.NET  basically consists of the scheduler engine which runs jobs implementing the IJob interface. The interface simply consists of an Execute method. I export each job with the IJob interface using  MEF . [Export(typeof(IJob))] public class MyJob : IJob { public void Execute(JobExecutionContext context) { ... } } In my scheduler implementation the jobs are imported into an IEnumerable<IJob>. [ImportMany(typeof(IJob))] public IEnumerable<IJob> Jobs { get; set; } The initialization of the scheduled tasks is pretty straight forward. A standard scheduler factory is initialized which in turn gives us a scheduler instance. Each job that was imported by  MEF  is then added to the scheduler, here ...