BlackLinks.Templates.CSharpTemplateCompiler.generateDiscoveryClass C# (CSharp) Метод

generateDiscoveryClass() приватный Метод

private generateDiscoveryClass ( ) : void
Результат void
		void generateDiscoveryClass ()
		{
			CodeTypeDeclaration discoveryClass = new CodeTypeDeclaration ("DiscoveryProvider");
			discoveryClass.BaseTypes.Add (typeof(ITemplateInstanceDiscoveryProvider));
			ns.Types.Add (discoveryClass);
			
			CodeMemberMethod discoverInstanceMethod = new CodeMemberMethod ();
			discoverInstanceMethod.Parameters.Add (new CodeParameterDeclarationExpression (typeof(string), "path"));
			discoverInstanceMethod.Name = "DiscoverInstance";
			discoverInstanceMethod.ReturnType = new CodeTypeReference (typeof(TemplateRenderResource));
			discoverInstanceMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final;
			discoveryClass.Members.Add (discoverInstanceMethod);
			
			foreach (GeneratedResourceClass generatedClass in this.generatedResourcesClassNames)
			{
				CodeConditionStatement condition = new CodeConditionStatement ();
				condition.Condition = new CodeBinaryOperatorExpression (new CodeArgumentReferenceExpression ("path"), CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression (generatedClass.DiscoveryPath));
				condition.TrueStatements.Add (new CodeMethodReturnStatement (new CodeObjectCreateExpression (
						getResourceFullTypeName (generatedClass.ClassName))));
				discoverInstanceMethod.Statements.Add (condition);
			}
			discoverInstanceMethod.Statements.Add (new CodeMethodReturnStatement (new CodePrimitiveExpression (null)));
		
			// Generate Discovery Attribute
			
			this.codeCompilerUnit.AssemblyCustomAttributes.Add (
				new CodeAttributeDeclaration (
					new CodeTypeReference (typeof(TemplateInstanceDiscoveryProviderAttribute)),
				 new CodeAttributeArgument[] { 
				new CodeAttributeArgument ("DiscoveryType",
				new CodeTypeOfExpression (getResourceFullTypeName (discoveryClass.Name)))}));
		}