Exemplo n.º 1
0
        public SimpleAssemblyProvider(string testFileFullPath)
        {
            //uchováme cestu k "definujícímu" souboru
            _fullPath = testFileFullPath;

            //jméno assembly odvodíme od názvu souboru
            _name = Path.GetFileName(_fullPath);

            //připravíme kontejner kam vložíme definovanou metodu
            _methods = new HashedMethodContainer();

            //vytvoření metody začneme přípravou typu, kde je definovaná
            _declaringType = TypeDescriptor.Create("MEFEditor.ProviderTest");
            //určíme jméno metody
            var methodName = "GetDefiningAssemblyName";
            //návratový typ metody
            var returnType = TypeDescriptor.Create <string>();

            //z definovaných údajů můžeme vytvořit popis
            //metody, která nebude mít žádné parametry a bude statická
            var methodInfo = new TypeMethodInfo(
                _declaringType, methodName, returnType,
                ParameterTypeInfo.NoParams,
                isStatic: true,
                methodTypeArguments: TypeDescriptor.NoDescriptors);

            //k dokončení definice metody stačí vytvořit
            //generátor jejích analyzačních instrukcí
            var methodGenerator = new DirectedGenerator(emitDirector);

            //definovanou metodu vytvoříme
            var method = new MethodItem(methodGenerator, methodInfo);

            //aby byla metoda dohledatelná, musíme ji ještě zaregistrovat
            _methods.AddItem(method);
        }