bloritsch    2003/08/01 10:22:30

  Modified:    csframework/src/cs Attributes.cs IServiceManager.cs
               csframework/src/test AttributesTestCase.cs
  Log:
  update the attributes and attribute testcases
  
  Revision  Changes    Path
  1.9       +132 -24   avalon-sandbox/csframework/src/cs/Attributes.cs
  
  Index: Attributes.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/csframework/src/cs/Attributes.cs,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Attributes.cs     1 Aug 2003 15:40:55 -0000       1.8
  +++ Attributes.cs     1 Aug 2003 17:22:30 -0000       1.9
  @@ -56,75 +56,183 @@
        [AttributeUsage(AttributeTargets.Class,AllowMultiple=true)]
        public sealed class AvalonService : Attribute
        {
  -             private string m_name;
  +             private Type m_type;
   
                ///<summary>
                ///  Constructor to initialize the service's name.
                ///</summary>
  -             ///<param name="name">The name of the service</param>
  -             public AvalonService(string name)
  +             ///<param name="type">The type for the service</param>
  +        ///<exception cref="ArgumentException">If the "type" value is not an 
interface</exception>
  +        public AvalonService(Type type)
                {
  -                     m_name = name;
  +            if (!type.IsInterface)
  +            {
  +                throw new ArgumentException(
  +                    "The type passed in does not represent an interface",
  +                    "type" );
  +            }
  +
  +                     m_type = type;
                }
   
                ///<summary>
                ///  The name of the service
                ///</summary>
  -             public string Name
  +             public Type ServiceType
                {
                        get
                        {
  -                             return m_name;
  +                             return m_type;
                        }
                }
        }
   
  +    /// <summary>
  +    /// An enumeration used to mark a dependency as optional or not.
  +    /// </summary>
  +     public enum Optional
  +     {
  +        /// <summary>
  +        /// Use "True" if the dependency is not required for the component
  +        /// to run properly.
  +        /// </summary>
  +             True,
  +        /// <summary>
  +        /// Use "False" if the component will not work without the dependnecy.
  +        /// </summary>
  +             False
  +     }
  +
        ///<summary>
        ///  Attribute to mark the dependencies for a component.
        ///</summary>
        [AttributeUsage(AttributeTargets.Class,AllowMultiple=true)]
        public sealed class AvalonDependency : Attribute
        {
  +             private Type m_type;
  +             private bool m_optional;
                private string m_name;
   
                ///<summary>
  -             ///  Boolean property to see if this dependency is required or not.
  +             ///  Constructor to initialize the dependency's name.
                ///</summary>
  -             public bool optional;
  -
  -             /// <summary>
  -             ///   String prperty to use to look up the dependency from the
  -             ///   <see cref="ILookupManager"/>
  -             /// </summary>
  -             public string key;
  +        ///<param name="type">The type for the dependency</param>
  +        ///<param name="key">The dependency's lookup key</param>
  +             ///<param name="optional">Whether or not the dependency is 
optional</param>
  +             ///<exception cref="ArgumentException">If the "type" value is not an 
interface</exception>
  +             public AvalonDependency(Type type, string key, Optional optional)
  +             {
  +            if (!type.IsInterface)
  +            {
  +                throw new ArgumentException(
  +                    "The type passed in does not represent an interface",
  +                    "type" );
  +            }
  +
  +            m_name = (null == key) ? type.Name : key;
  +                     m_optional = (optional == Optional.True);
  +                     m_type = type;
  +             }
   
                ///<summary>
  -             ///  Constructor to initialize the dependency's name.
  +             ///  The lookup name of the dependency
                ///</summary>
  -             ///<param name="name">The dependency's name</param>
  -             public AvalonDependency(string name)
  +             public string Key
                {
  -                     m_name = name;
  -                     optional = false;
  -                     key = name;
  +                     get
  +                     {
  +                             return m_name;
  +                     }
                }
   
                ///<summary>
  -             ///  The name of the dependency
  +             ///  Is this dependency optional?
                ///</summary>
  -             public string Name
  +             public bool IsOptional
                {
                        get
                        {
  -                             return m_name;
  +                             return m_optional;
  +                     }
  +             }
  +
  +             /// <summary>
  +             ///   The dependency type
  +             /// </summary>
  +             public Type DependencyType
  +             {
  +                     get
  +                     {
  +                             return m_type;
                        }
                }
        }
   
  +    /// <summary>
  +    /// Enumeration used to mark the component's lifestyle.
  +    /// </summary>
  +     public enum Lifestyle
  +     {
  +        /// <summary>
  +        /// Singleton components are instantiated once, and shared
  +        /// between all clients.
  +        /// </summary>
  +             Singleton,
  +        /// <summary>
  +        /// Thread components have a unique instance per thread.
  +        /// </summary>
  +             Thread,
  +        /// <summary>
  +        /// Pooled components have a unique instance per client,
  +        /// but they are managed in a pool.
  +        /// </summary>
  +             Pooled,
  +        /// <summary>
  +        /// Transient components are created on demand.
  +        /// </summary>
  +             Transient
  +     }
  +
        ///<summary>
        ///  Attribute used to mark a component as an Avalon component.
        ///</summary>
        [AttributeUsage(AttributeTargets.Class,AllowMultiple=false)]
        public sealed class AvalonComponent : Attribute
  -     {}
  +     {
  +             private Lifestyle m_lifestyle;
  +             private string m_name;
  +
  +        /// <summary>
  +        /// Marks a class as a component, providing a configuration name and 
preferred lifestyle
  +        /// </summary>
  +        /// <param name="name">The name used for configuration elements</param>
  +        /// <param name="lifestyle">The lifestyle used for the component</param>
  +             public AvalonComponent( string name, Lifestyle lifestyle )
  +             {
  +                     m_lifestyle = lifestyle;
  +                     m_name = name;
  +             }
  +
  +        /// <summary>
  +        /// The configuration name assigned to this component.
  +        /// </summary>
  +             public string ConfigurationName
  +             {
  +                     get
  +                     {
  +                             return m_name;
  +                     }
  +             }
  +
  +        /// <summary>
  +        /// The lifestyle associated with the component
  +        /// </summary>
  +             public Lifestyle Lifestyle
  +             {
  +                     get
  +                     {
  +                             return m_lifestyle;
  +                     }
  +             }
  +     }
   }
  
  
  
  1.4       +8 -8      avalon-sandbox/csframework/src/cs/IServiceManager.cs
  
  Index: IServiceManager.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/csframework/src/cs/IServiceManager.cs,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IServiceManager.cs        1 Aug 2003 15:40:55 -0000       1.3
  +++ IServiceManager.cs        1 Aug 2003 17:22:30 -0000       1.4
  @@ -65,9 +65,9 @@
        public interface ILookupManager
        {
                /// <summary>
  -             /// Gets the component associated with the given role.
  +             /// Gets the resource associated with the given key.
                /// </summary>
  -             object this[string role] 
  +             object this[string key] 
                {
                        get; 
                }
  @@ -75,12 +75,12 @@
                /// <summary>
                /// Checks to see if a component exists for a role.
                /// </summary>
  -             /// <param name="role">A String identifying the role to check.</param>
  -             /// <returns>True if the component exists; otherwise, false.</returns>
  -             bool Contains(string role);
  +             /// <param name="key">A String identifying the lookup name to 
check.</param>
  +             /// <returns>True if the resource exists; otherwise, false.</returns>
  +             bool Contains(string key);
   
                /// <summary>
  -             /// Return the component when you are finished with it.
  +             /// Return the resource when you are finished with it.
                /// This allows the <see cref="ILookupManager"/> to handle 
                /// the End-Of-Life Lifecycle events associated with the component.
                /// </summary>
  @@ -89,7 +89,7 @@
                /// This is to allow easy use of the <see cref="ILookupManager"/> 
system without
                /// having to trap Exceptions on a release.
                /// </remarks>
  -             /// <param name="component">The component we are releasing.</param>
  -             void Release(object component);
  +             /// <param name="resource">The resource we are releasing.</param>
  +             void Release(object resource);
        }
   }
  
  
  
  1.6       +19 -14    avalon-sandbox/csframework/src/test/AttributesTestCase.cs
  
  Index: AttributesTestCase.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/csframework/src/test/AttributesTestCase.cs,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AttributesTestCase.cs     1 Aug 2003 15:40:56 -0000       1.5
  +++ AttributesTestCase.cs     1 Aug 2003 17:22:30 -0000       1.6
  @@ -58,31 +58,36 @@
        [Test]
        public void Service()
        {
  -             string name = "Apache.AvalonFramework.AvalonAttributeTest";
  -             AvalonService service = new AvalonService( name );
  -             Assertion.AssertEquals( name, service.Name );
  +             Type type = typeof(IDisposable);
  +             AvalonService service = new AvalonService( type );
  +             Assertion.AssertEquals( type, service.ServiceType );
        }
   
        [Test]
        public void Dependency()
        {
  -             string name = "Apache.AvalonFramework.AvalonAttributeTest";
  -             AvalonDependency dependency = new AvalonDependency(name);
  -             Assertion.AssertEquals( name, dependency.Name );
  -             Assertion.AssertEquals( false, dependency.optional );
  +             string name="test";
  +             Type type = typeof(IDisposable);
  +             AvalonDependency dependency = new 
AvalonDependency(type,name,Optional.False);
  +             Assertion.AssertEquals( type, dependency.DependencyType );
  +             Assertion.AssertEquals( name, dependency.Key );
  +             Assertion.AssertEquals( false, dependency.IsOptional );
   
  -             dependency = new AvalonDependency(name);
  -             dependency.optional=true;
  -             dependency.key="attribute-test";
  -             Assertion.AssertEquals( name, dependency.Name );
  -             Assertion.AssertEquals( true, dependency.optional );
  -             Assertion.AssertEquals( "attribute-test", dependency.key );
  +             dependency = new AvalonDependency(type,null,Optional.True);
  +             Assertion.AssertEquals( type, dependency.DependencyType );
  +             Assertion.AssertEquals( type.Name, dependency.Key );
  +             Assertion.AssertEquals( true, dependency.IsOptional );
        }
   
        [Test]
        public void Component()
        {
  -             Assertion.AssertNotNull( new AvalonComponent() );
  +             string name="test";
  +             AvalonComponent component = new AvalonComponent( name, 
Lifestyle.Singleton );
  +             Assertion.AssertNotNull( component );
  +
  +             Assertion.AssertEquals( name, component.ConfigurationName );
  +             Assertion.AssertEquals( Lifestyle.Singleton, component.Lifestyle );
        }
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to