New to site?


Lost password? (X)

Already have an account?


(X)

Presents

#CSHARPCON20

The C# Corner Annual Conference 2020 is a three-day annual event for software professionals and developers.

3
DAYS
72
SPEAKERS
65
SESSIONS

Magnus Mårtensson
Microsoft Regional Director, Azure MVP, CEO Loftysoft

Avirag Jain
Director & CTO R Systems

Mahesh Chand
Founder C# Corner, CEO Mindcracker

Chris Gali
CEO & Co-Founder Graphite

Subinder Khurana
Chief Architect StoryProcess, Founder NASSCOM DeepTech Club

Bryan Rishforth
Investor, Chairman Graphite

Bryn Everson
Director Biz Dev Graphite

Raj Tiwari
Digital Transformation Leader, Futurist and Visionary

Joseph Guadagno
Microsoft MVP, Lead Quicken Loans

Nikita Sachdev
Entrepreneur, Blockchain Enthusiast & Advisor, Social Media Influencer

Doug Wagner
COO & Founder Adapt Technical Group

Ritesh Modi
Architect, Senior Evangelist, Cloud Architect

Crystal Wenrick
Director Communications Mindcracker

Allen O’Neill
Microsoft MVP, Consulting Engineer/Architect

Praveen Kumar
CEO MCN Solutions

Chris Love
Founder Love2Dev, Microsoft MVP, Author

Sanjay Vyas
Microsoft Regional Director, Microsoft MVP, Founder & CEO SkillLabs Technologies

Veena Sarda
Deep Learning Consultant, Author

Sekhar Srinivasan
C# Corner MVP, Microsoft Certified Trainer, Pluralsight Author

Lalit Bansal
Founder & CEO - EIY SYS

Navdeep Garg
CEO Revinfotech

Prakash Tripathi
Tech Manager/Leader, Microsoft MVP, Blogger

Bhavna Jain
Breakthrough Consultant

Naveen Sharma
Enterprise Architect, Leadership Coach, Author

Vidya Vrat Agarwal
Principal Architect, Microsoft MVP, Author

Sheetal Agarwal
Founder Clownselors, Medical Clown, Trainer

Abhishek Kant
Founder GTM Catalyst

Vishnu Saran
Founder & CEO VoiceQube

Sandeep Soni
Founder & CEO Deccansoft, Microsoft Certified Trainer

Parveen Malik
AVP InfoSec & Vulnerability Management, Information Security Expert

Nitin Pandit
Microsoft MVP, Developer Evangelist, Author

Niloshima Srivastava
C# Corner MVP, Tech Architect, Trainer, Blogger

Bala Chirtsabesan
Senior Software Engineer at Microsoft, Author

Manoj Mittal
Sr. Technical Architect, C# Corner MVP, Author

Chandni Di
Co-Founder Voice of Slum

Vithal Wadje
Technical Lead, Microsoft MVP, Author

Shivam Ahuja
Founder SkillCircle, Business Mentor

Chervine Bhiwoo
Solution Architect, Microsoft MVP, Author

Saurabh Jain
Vice President Paytm, Founder Fun2Do Labs, Author

Vinay Solanki
Head IoT at Lenovo, Founder IoT-NCR

Anshu kumari
Founder Blockchainkids, Inventor, Trainer

Amit Singal
CEO Startup Buddy

Dev Pratap
Co-Founder & CEO Voice of Slum

Amey Vartak
Technology Consultant, Full Stack Developer, C# Corner MVP, Author

Viswanatha Swamy
Principal Software Engineer, C# Corner MVP, Author

Sanket Verma
Research Engineer @ Ballistics (Forensics) and Chair, PyData Delhi

Sourabh Somani
Lead Developer, Microsoft MVP, Author

Abhishek Mishra
Software Architect, C# Corner MVP, Author

Siddharth Vaghasia
Technical Consultant, C# Corner MVP, Blogger

Bassam Alugili
Senior Software Specialist, Database Expert

S Ravi Kumar
Solution Architect, C# Corner MVP, Author

Sundaram Subramanian
Full Stack Developer, C# Corner MVP, Speaker

Deepesh Somani
Solution Architect, Microsoft MVP, Author

Debasis Saha
Technical Project Manager, C# Corner MVP, Blogger, Author

Vipul Jain
Software Architect, C# Corner MVP, Author

Akshay Patel
Technical Architect, Microsoft Certified Trainer, C# Corner MVP, Author

Stephen Simon
RPA Developer, Evangelist, Author

Vivek Sharma
Founder Kingster636, AR/VR Specialist

Jeetendra Gund
Technical Lead, C# Corner MVP, Author

Sujal Beniwal
AI Enthusiast, Student

M Viknaraj
Microsoft MVP, Azure Architect, Author

Prasham Sabadra
Software Architect, C# Corner MVP, Trainer, Author

Aakash Maurya
Senior Developer, C# Corner MVP, Speaker

Ankit Sharma
Senior Software Engineer, C# Corner MVP, Author

Mangesh Gaherwar
Team Lead, C# Corner MVP, Author

Viral Jain
Technical Consultant, C# Corner MVP, Author

Bhasker Das
Solution Architect, Evangelist

Manish Dwivedi
Associate Project Manager

Ck Nitin
Programmer, Author

Rohit Gupta
Technical Trainer, Author

Manish Tewatia
Full-stack Marketer, UX Designer

Bhavya Gaur
Technical Illustrator

Rohit Tomar
SEO/SMO Expert

Web Track

Cloud & Data Track

Dev Track

8am-9am

Registration & Breakfast

9am-10am

Future of Desktop Apps with JS (ElectronJs)

Nitin Pandit

Building Serverless Microservices Using Microsoft Azure

Vithal Wadje

Innovating RPA: A Robot for Every Person

Stephen Simon

10am-11am

Managing Cloud Storage Accounts using Logic Apps

Viknaraj Manogararajah

Data visualization using Python

Sekhar Srinivasan

Going Cross platform with AR Foundation

Vivek Sharma

11am-12pm

Keynote

12pm-1pm

Managing your Azure dependencies in ASP.NET Core apps using VS

Bala Chirtsabesan

Securing Applications on Intelligent Azure

Abhishek Mishra

Getting started with Blazor the Framework of Future

S Ravi Kumar

1pm-2pm

Lunch

2pm-2:45pm

Build Progressive Web Apps using Angular 9

Debasis Saha

Build and deploy to any platform using Azure DevOps

Chervine Bhiwoo

Deep Dive in Azure Service Bus

Akshay Patel

2:45pm-3:45pm

Build a Native Mobile Application using React Native and JavaScript

Joseph Guadagno

Making sense of Web Job, Web Job SDK and Functions in Azure

Prakash Tripathi

CloudFront Distribution in AWS

Viral Jain

3:45pm-4pm

Tea Break

4pm-4:30pm

Introduction to PowerBI

Aakash Maurya

Build Advanced SPFx solutions with React and Graph API

Siddharth Vaghasia

Build Business Intelligence Analyst (BIA) Skills

Sundaram Subramanian

4:30pm-5pm

Deep dive of Power Platform – AI BUILDER

Prasham Sabadra

Panel 1

What's new in SharePoint development

Vipul Jain

5pm-5:30pm

Build a SSO (Single Sign On) based Native JavaScript application with Microsoft Identity within 10 minutes

Manoj Mittal

Panel 2

Applications and working of AI

Veena Sarda

5:30pm-6pm

Deploying serverless API's with .Net core 3.0 on AWS & Azure

Amey Vartak

Panel 3

Blockchain with .NET Core (Ark)

Anshu Kumari

6pm-6:30pm

Closing Note & Prize Distribution

Dev Track

Cloud Track

Architecture Track

Emerging Tech Track

8am-9am

Registration & Breakfast

9am-10am

Creating Full-Stack Web Apps Using Server-Side Blazor

Ankit Sharma

Real time face recognition with MS Cognitive Services

Niloshima Srivastava

Building Scalable APIs with GraphQL

Jeetendra Gund

Future of development with AI and Blockchain

Navdeep Garg

10am-11am

Debugging Tips and Tricks with Visual Studio 2019

Joseph Guadagno

Azure Containers

Abhishek Kant

Enterprise Architecture

Naveen Sharma

Bot Framework - learn it fast and look like a boss!

Allen O’Neill

11am-12:30pm

Keynote

12:30pm-1:30pm

.Net Core & C# 8 Performance

David McCarter

Working with Azure kubernetes services

Ritesh Modi

Becoming an Architect

Vidyavrat Agarwal

Why Techies Need to Learn Product Management

Saurabh Jain

1:30pm-2:30pm

Lunch

2:30pm-3:30pm

Build a rules engine in .Net Core

Sanjay Vyas

Building CI and CD Pipeline using Azure DevOps

Sandeep Soni

Entity Framework Core - Tips and Tricks, Performance Optimization, and Tuning

Bassam Alugili

Hacking your way into Data Science

Sanket Verma

3:30-4:15pm

Speed up your .Net Core Website

Sourabh Somani

Azure

Magnus Mårtensson

Demystifying Open Distro for Elasticsearch

Suman Debnath

Future of Data

Shivam Ahuja

4:15pm-4:30pm

Tea Break

4:30pm-5:15pm

gRPC with C# and .Net Core

Mangesh Gaherwar

Panel 1

Essentials of Cloud security

Parveen Malik

Power platform and Dynamics 365

Deepesh Somani

5:15pm-6pm

Microservices - the gRPC Way

Viswanatha Swamy

Panel 2

Reserved

Reserved

6pm-6:30pm

Closing Note & Prize Distribution

Building Extensible .NET Core Applications with MEF

A plugin architecture lets an application gain new capabilities without changing its central business logic every time a feature is added. In a .NET Core or modern .NET solution, Managed Extensibility Framework (MEF) can provide a practical composition model for discovering implementations, matching them to contracts, and assembling services at runtime.

This approach suits systems that need interchangeable modules: reporting providers, payment connectors, document handlers, workflow steps, or AI services. It is especially useful for software teams working across Sydney, Melbourne, Brisbane, and other Australian technology hubs, where products often need to integrate with changing cloud services, local compliance requirements, and separate customer deployments.

Why a plugin architecture helps

A conventional application often grows around a large dependency-injection registration file and a collection of conditional statements. Adding a new provider may require editing core code, rebuilding the entire product, and releasing it to every customer. A plugin design moves optional functionality into separate assemblies with clear contracts.

MEF addresses this problem through composition. A host defines an interface, while an extension marks a class as an export that fulfils that interface. The host scans suitable assemblies, discovers the exports, and injects them into a collection or a selected service. The core application remains relatively stable while modules evolve independently.

This model is valuable for products with customer-specific editions. A logistics application might load a carrier integration for Melbourne and another for Perth; a learning platform could enable separate content providers; an internal tool might install an Azure storage module in one environment and a local file module in another.

The design also supports parallel development. A team can work on the host, while other developers build plugins against a versioned contract package. The same separation can make conference demonstrations and technical prototypes easier to maintain, much like the performance considerations discussed in ValueTask resource pools.

Selecting the right MEF libraries

MEF has more than one programming model, so package selection should be deliberate. The older System.ComponentModel.Composition API is familiar to many .NET Framework developers and uses attributes such as Export and Import. For .NET Core and modern .NET, the System.Composition family is commonly considered the cleaner MEF 2 option, with packages such as System.Composition.Hosting, System.Composition.Runtime, and System.Composition.TypedParts.

The MEF 2 style uses a ContainerConfiguration to assemble parts. A simplified host might look like this:

using System.Composition.Hosting;
using System.Reflection;

var configuration = new ContainerConfiguration()
    .WithAssembly(typeof(IReportExporter).Assembly)
    .WithAssembly(Assembly.LoadFrom(pluginPath));

using var container = configuration.CreateContainer();
var exporters = container.GetExports<IReportExporter>();

The exact package versions and supported target frameworks should be checked before committing to a production design. A solution targeting .NET 8 may have different dependency constraints from a long-lived .NET Core 3.1 product, and trimming or single-file publishing can affect reflection-based discovery.

MEF is a composition framework rather than a complete plugin security boundary. It can locate and construct components, but it does not automatically make untrusted code safe. If a third-party assembly could be malicious, use a separate process, operating-system permissions, container isolation, or a carefully controlled extension marketplace instead of loading it directly into the application process.

Defining stable contracts

The contract assembly is the most important part of the design. Keep it small, dependency-light, and focused on business capabilities rather than implementation details. A contract might contain an interface, a request model, a result model, and a small set of error abstractions:

public interface IReportExporter
{
    string Format { get; }

    Task<ExportResult> ExportAsync(
        ReportData report,
        CancellationToken cancellationToken);
}

public sealed record ExportResult(
    string ContentType,
    byte[] Content);

The host should depend on this assembly, while plugins reference it without referencing the host’s web project, database layer, or user-interface code. That prevents circular dependencies and makes the extension point portable across a console worker, ASP.NET Core service, or desktop administration tool.

Versioning deserves attention from the start. Adding a new method to an interface can break every existing plugin. Prefer a new interface, optional capability interface, or an adapter when a contract must grow. Use semantic versioning and document whether the host guarantees backward compatibility for one, two, or more plugin generations.

Avoid leaking framework-specific objects through the contract. Passing HttpContext, an Entity Framework DbContext, or an internal configuration class ties every extension to one host implementation. Plain records, interfaces, cancellation tokens, and carefully designed service abstractions are easier to test and upgrade.

Discovering and loading extensions

There are two common discovery strategies. The first scans a known directory for assemblies, loads each candidate, and asks MEF to inspect its exported parts. The second uses a configured list of assemblies, which offers stronger control and more predictable startup. Directory scanning is convenient for administrators, while explicit registration is easier to audit.

A plugin can expose an implementation with an export attribute:

using System.Composition;

[Export(typeof(IReportExporter))]
public sealed class CsvReportExporter : IReportExporter
{
    public string Format => "csv";

    public Task<ExportResult> ExportAsync(
        ReportData report,
        CancellationToken cancellationToken)
    {
        var bytes = CreateCsv(report);
        return Task.FromResult(
            new ExportResult("text/csv", bytes));
    }
}

The host can request all exporters, select one by metadata, or compose a named capability. Metadata is useful when the plugin contract is broad:

[Export(typeof(IReportExporter))]
[ExportMetadata("Format", "csv")]

For larger products, place each extension in its own directory with its dependency files and manifest. Record the assembly name, plugin version, contract version, supported operating systems, and required configuration. This reduces ambiguity when several plugins depend on different versions of the same library.

Assembly loading becomes more complex when plugins carry conflicting dependencies. Modern .NET provides AssemblyLoadContext, which can help isolate load contexts, but it does not solve every compatibility issue. If extensions need independent lifecycles or potentially conflicting native libraries, an out-of-process plugin model may be a better fit than in-process MEF composition.

Managing dependencies and lifetimes

MEF composition and ASP.NET Core dependency injection can work together, but their responsibilities should be clear. MEF can discover plugin types, while the application’s service provider supplies logging, options, HTTP clients, and database abstractions. A plugin should receive host services through explicit imports or a small service facade rather than creating its own global service provider.

Constructor injection is generally preferable because it makes required dependencies visible. Optional imports can be appropriate for capabilities that a plugin can operate without, but excessive optional composition tends to hide configuration failures. A missing required export should produce a clear startup error that identifies the contract and assembly involved.

Lifetime decisions matter for resources such as sockets, caches, and database connections. A stateless exporter may be safely reused, while a component holding request-specific state should be created per operation. Async methods should accept cancellation tokens and avoid blocking calls, especially when a plugin runs inside an ASP.NET Core request.

Configuration should be isolated by plugin name or identifier. For example, Plugins:Csv:Delimiter is easier to manage than a collection of unrelated global keys. Secrets should come from a managed secret store or environment-specific provider rather than from a plugin DLL or checked-in JSON file. Teams deploying to Azure Australia East or Australia Southeast can then keep regional settings and credentials separate without recompiling extensions.

Testing, diagnostics, and operational safety

A plugin contract needs its own test suite. Contract tests can verify that every implementation returns valid content types, honours cancellation, handles empty input, and produces useful failures. The host should also test composition with missing assemblies, duplicate exports, incompatible versions, and malformed plugin metadata.

Logging should identify the plugin name and version in every important event. Startup logs can show discovered extensions, rejected assemblies, and composition errors. Health checks may report whether a required plugin is available, while optional extensions can be marked degraded rather than bringing down the whole service.

Australian deployments may process personal information covered by the Privacy Act 1988 and the Australian Privacy Principles. A plugin that exports reports, sends customer data to a SaaS endpoint, or records diagnostic payloads needs a clear data-flow review. Data residency, retention, access controls, and breach-response procedures should be considered alongside technical composition.

The same discipline applies to licensing and procurement. A plugin may introduce a commercial dependency, open-source obligations, or a vendor-specific cloud service. Australian Consumer Law can also be relevant when a product’s advertised capabilities depend on optional modules. Keep a software bill of materials and record which extension version was deployed to each customer environment.

Comparing extensibility approaches

MEF is most attractive when composition should be declarative and extensions are discovered from assemblies. It is less suitable when the system needs strict tenant isolation, polyglot modules, or frequent independent deployment. Comparing it with ordinary dependency injection and process-based integration helps clarify the boundary.

Approach Discovery model Isolation Best fit Main trade-off
MEF Attribute and assembly composition Usually in-process .NET plugins with shared contracts Reflection and versioning require care
Built-in dependency injection Explicit registration In-process Stable application-owned services Less flexible for unknown modules
Reflection-only custom loader Custom scanning and activation Usually in-process Small specialised extension systems More code to maintain and diagnose
Separate process or worker IPC, HTTP, or messaging Stronger process boundary Untrusted or independently deployed plugins Operational and communication overhead
Webhook or SaaS integration Network contract Service boundary External vendors and cloud platforms Latency, availability, and data-governance concerns

A useful rule is to use MEF when the host and plugins share the same runtime assumptions and a versioned .NET contract. Use built-in dependency injection for application internals that are known at compile time. Choose a separate process or network boundary when the extension has a different release cycle, requires stronger fault containment, or handles sensitive data in a way the host should not directly control.

Practical recommendations for a maintainable design

A production-ready implementation benefits from a small set of explicit engineering rules:

  • Keep the contract assembly independent from the host’s UI, database, and web layers.
  • Pin compatible MEF package versions and test composition against every supported target framework.
  • Validate plugin manifests, versions, capabilities, and configuration before activation.
  • Prefer explicit assembly allow-lists when extensions come from controlled deployments.
  • Use cancellation, structured logging, and bounded resource lifetimes in every plugin operation.
  • Isolate untrusted or failure-prone extensions in a separate process rather than relying on MEF for security.
  • Maintain contract tests, a software bill of materials, and a rollback procedure for failed plugin updates.

For teams exploring AI-enabled extensions, the contract can expose a narrow capability such as ITextClassifier or ISummarisationProvider rather than embedding a particular model SDK throughout the host. That keeps providers replaceable as model costs, privacy rules, and latency requirements change; even exploratory machine learning projects benefit from this separation between an application capability and the model implementation.

A well-designed MEF solution therefore has three stable boundaries: the host controls lifecycle and policy, the contract defines capability, and each plugin owns its implementation. With version checks, observability, testing, and Australian data-governance requirements built into those boundaries, the architecture can grow without turning every new integration into a rewrite.

The Leela Ambience Convention Hotel

1, CBD, Maharaj Surajmal Road, Near Yamuna Sports Complex, Delhi, 110032

KNOW MORE

GENERAL QUERIES


Manish Tewatia

+91-9718-431-042

TICKET QUERIES


Atul Gupta

+91-9910-125-804