Vra

Het iemand gewerk veel met Microsoft se Bestuurde Uitbreidings Framework (MEF)? Kinda klink soos dit probeer om alles vir almal mense wees - Dit is 'n add-in-bestuurder! Dis eend tik! Ek wonder of iemand het 'n ervaring met dit, positief of negatief.

Ons beplan tans op die gebruik van 'n generiese IoC implementering ala MvcContrib vir ons volgende groot projek. Moet ons gooi MEF in die mengsel?

Was dit nuttig?

Oplossing

Ons is nie gerig vir MEF om 'n universele IoC wees. Die beste manier om te dink oor die IOK aspekte van MEF is 'n implementering detail. Ons gebruik IoC as 'n patroon, want dit is 'n goeie manier om die probleme wat ons is op soek na op te los te spreek.

MEF is gefokus op die rekbaarheid. Wanneer jy dink van MEF kyk na dit as 'n belegging in die neem van ons platform vorentoe. Ons toekomstige produkte en die platform sal MEF hefboom as 'n standaard meganisme vir die toevoeging van rekbaarheid. Derde party produkte en raamwerke sal ook in staat wees om hierdie dieselfde meganisme hefboom. Die gemiddelde "gebruiker" van MEF sal skrywer komponente wat MEF sal verteer en nie direk in beslag MEF binne hul aansoeke.

Verbeel jou as jy wil ons platform te brei in die toekoms, val jy 'n dll in die gids bin en jy klaar is. Die MEF enabled app ligte met die nuwe uitbreiding. Dit is die visie vir MEF.

Ander wenke

Hierdie pos verwys na die Bestuurde Uitbreidings Framework Voorbeeld 2.

So, ek het 'n draai deur MEF en skryf 'n vinnige "Hello World", wat hieronder aangebied. Ek moet sê dit was heeltemal maklik om te duik in en verstaan. Die katalogus stelsel is groot en maak die uitbreiding van MEF self baie reguit vorentoe. Dit is triviale om dit te wys op 'n gids van invoegsel gemeentes en laat dit die res hanteer. MEF se erfenis ala Prism toon beslis deur, maar ek dink dit vreemd sou wees as dit nie gedoen het nie, gegewe dat beide raamwerke is oor samestelling.

Ek dink die ding wat stokke in my Craw die meeste is die "magic" van _container.Compose (). As jy kyk in die HelloMEF klas, sal jy sien dat die veld groete nooit geïnisialiseer deur enige van die kode, wat net voel snaaks. Ek dink ek verkies die pad IoC houers werk, waar jy uitdruklik die houer te vra om 'n voorwerp te bou vir jou. Ek wonder of 'n soort van "Niks" of "Leë" generiese inisialiseerder kan wees ten einde. d.w.z.

private IGreetings greetings = CompositionServices.Empty<IGreetings>();

Dit ten minste vul die voorwerp met "iets" tot tyd en wyl die houer samestelling kode loop om dit te vul met 'n ware "iets". Ek weet nie - dit getuig 'n bietjie van Visual Basic se Leë of Niks sleutelwoorde, wat ek altyd gehou het nie. As iemand anders het 'n paar gedagtes oor hierdie, wil ek graag na hulle nie luister. Miskien is dit iets wat ek nodig het net om te kry oor. Dit is gemerk met 'n groot vet [Import] kenmerk, so dit is nie soos dit is 'n volledige raaisel of enigiets.

Die beheer van leeftyd voorwerp is nie voor die hand liggend, maar alles is 'n Singleton by verstek, tensy jy 'n [CompositionOptions] kenmerk voeg tot die uitvoer klas. Wat laat jy óf Factory of Singleton spesifiseer. Dit sal lekker wees om te sien Pooled by hierdie lys gevoeg by 'n sekere punt.

Ek is nie regtig duidelik oor hoe die eend tik funksies werk. Dit lyk meer soos 'n meta-data inspuiting op voorwerp skepping eerder as eend tik. En dit lyk asof jy net kan voeg in een addisionele eend. Maar soos ek gesê het, ek is nie regtig duidelik oor hoe hierdie funksie werk net nog nie. Hopelik kan ek terugkom en vul dit in later.

Ek dink dit sou 'n goeie idee om skaduwee kopie die DLLs wat gelaai word deur DirectoryPartCatalog wees. Op die oomblik is die DLLs gesluit nadat MEF kry 'n houvas van hulle. Dit sou ook toelaat dat jy 'n gids watcher voeg en vang opgedateer addins. Dit sou mooi soet wees ...

Ten slotte, ek is bekommerd oor hoe vertrou die invoegsel DLLs is en hoe, of indien, MEF sal optree in 'n gedeeltelike vertroue omgewing. Ek vermoed toepassings met behulp van MEF sal vol vertroue vereis. Dit mag dalk ook raadsaam om die addins in hul eie AppDomain laai nie. Ek weet dit klap 'n bietjie van System.AddIn, maar dit sou baie duidelike skeiding tussen gebruiker addins en stelsel addins toelaat.

Goed - genoeg blathering. Hier is Hello World in MEF en C #. Geniet dit!

using System;
using System.ComponentModel.Composition;
using System.Reflection;

namespace HelloMEF
{
    public interface IGreetings
    {
        void Hello();
    }

    [Export(typeof(IGreetings))]
    public class Greetings : IGreetings
    {
        public void Hello()
        {
            Console.WriteLine("Hello world!");
        }
    }

    class HelloMEF : IDisposable
    {
        private readonly CompositionContainer _container;

        [Import(typeof(IGreetings))]
        private IGreetings greetings = null;

        public HelloMEF()
        {
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
            _container = new CompositionContainer(catalog);
            var batch = new CompositionBatch();
            batch.AddPart(this);
            container.Compose(batch);

        }

        public void Run()
        {
            greetings.Hello();
        }

        public void Dispose()
        {
            _container.Dispose();
        }

        static void Main()
        {
            using (var helloMef = new HelloMEF())
                helloMef.Run();
        }
    }
}

Op vraag Andy se van sekuriteit vir uitbreidings wat MEF vragte (jammer ek het nie genoeg punte nog het :)), die plek om dit te hanteer is in 'n Winkel. MEF katalogusse is heeltemal plug, sodat jy kan 'n persoonlike katalogus wat vergadering sleutels, ens bekragtig voordat die laai skryf. Jy kan selfs CAS gebruik as jy so verkies. Ons is op soek na moontlik verskaffing hakies om jou toelaat om dit te doen sonder om 'n katalogus te skryf. Maar die bron vir die huidige katalogusse is vrylik beskikbaar. Ek vermoed dat die minimum is iemand (miskien op ons span) sal een implementeer en gooi dit in 'n verlengstuk / contrib projek op CodePlex.

Duck tik sal nie skip in V1 al is dit in die huidige daling. In 'n toekomstige daling sal ons dit vervang met 'n plug adapter meganisme waar 'n mens kan haak in 'n eend tik meganisme. Die rede waarom ons gekyk na eend tik is om weergawes scenario's aan te spreek. Met Duck Tik jy kan die gedeelde verwysings tussen uitvoerders en invoerders te verwyder, waardeur verskeie weergawes van 'n kontrak om kant te leef mekaar.

Dit is nie 'n inspuiting van beheer houer. Dis plug-in ondersteuning raamwerk.

Ek sou sê gegewe dit gaan hang af van naamruimte 'Stelsel' in die NET 4.0 Framework dat jy nie te ver verkeerd kan gaan. Dit sal interessant wees om te sien hoe MEF stelsels hulle verder ontwikkel en watter invloed Hamilton Verissimo (Castle) het op die MEF se rigting.

As dit kwaak soos 'n eend, dit dalk net wees deel van die huidige kudde van die IOC houers ...

Meer gedetailleerde bespreking oor hierdie in hierdie post en die kommentaar

http://mikehadlow.blogspot.com/2008 /09/managed-extensibility-framework-why.html

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top