IManagedCollection.cs :  » Inversion-of-Control-Dependency-Injection » Spring.net » Spring » Objects » Factory » Config » C# / CSharp Open Source

Home
C# / CSharp Open Source
1.2.6.4 mono .net core
2.2.6.4 mono core
3.Aspect Oriented Frameworks
4.Bloggers
5.Build Systems
6.Business Application
7.Charting Reporting Tools
8.Chat Servers
9.Code Coverage Tools
10.Content Management Systems CMS
11.CRM ERP
12.Database
13.Development
14.Email
15.Forum
16.Game
17.GIS
18.GUI
19.IDEs
20.Installers Generators
21.Inversion of Control Dependency Injection
22.Issue Tracking
23.Logging Tools
24.Message
25.Mobile
26.Network Clients
27.Network Servers
28.Office
29.PDF
30.Persistence Frameworks
31.Portals
32.Profilers
33.Project Management
34.RSS RDF
35.Rule Engines
36.Script
37.Search Engines
38.Sound Audio
39.Source Control
40.SQL Clients
41.Template Engines
42.Testing
43.UML
44.Web Frameworks
45.Web Service
46.Web Testing
47.Wiki Engines
48.Windows Presentation Foundation
49.Workflows
50.XML Parsers
C# / C Sharp
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source » Inversion of Control Dependency Injection » Spring.net 
Spring.net » Spring » Objects » Factory » Config » IManagedCollection.cs
#region License

/*
 * Copyright  2002-2005 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#endregion

#region Imports

using System;
using System.Collections;
using Spring.Objects.Factory.Config;

#endregion

namespace Spring.Objects.Factory.Config{
  /// <summary>
  /// Denotes a special placeholder collection that may contain
  /// <see cref="Spring.Objects.Factory.Config.RuntimeObjectReference"/>s or
  /// other placeholder objects that will need to be resolved.
  /// </summary>
  /// <remarks>
  /// <p>
  /// <c>'A special placeholder collection'</c> means that the elements of this
  /// collection can be placeholders for objects that will be resolved later by
  /// a Spring.NET IoC container, i.e. the elements themselves will be
  /// resolved at runtime by the enclosing IoC container.
  /// </p>
  /// <p>
  /// The core Spring.NET library already provides three implementations of this interface
  /// straight out of the box; they are...
  /// </p>
  /// <list type="bullet">
  /// <item>
  /// <description>
  /// <see cref="Spring.Objects.Factory.Config.ManagedList"/>.
  /// </description>
  /// </item>
  /// <item>
  /// <description>
  /// <see cref="Spring.Objects.Factory.Config.ManagedDictionary"/>.
  /// </description>
  /// </item>
  /// <item>
  /// <description>
  /// <see cref="Spring.Objects.Factory.Config.ManagedSet"/>.
  /// </description>
  /// </item>
  /// </list>
  /// <p>
  /// If you have a custom collection class (i.e. a class that either implements the
  /// <see cref="System.Collections.ICollection"/> directly or derives from a class that does)
  /// that you would like to expose as a special placeholder collection (i.e. one that can
  /// have <see cref="Spring.Objects.Factory.Config.RuntimeObjectReference"/>s as elements
  /// that will be resolved at runtime by an appropriate Spring.NET IoC container, just
  /// implement this interface.
  /// </p>
  /// </remarks>
  /// <example>
  /// <p>
  /// Lets say one has a <c>Bag</c> class (i.e. a collection that supports bag style semantics).
  /// </p>
  /// <code language="C#">
  /// using System;
  /// 
  /// using Spring.Objects.Factory.Support;
  /// 
  /// namespace MyNamespace
  /// {
  ///    public sealed class Bag : ICollection
  ///    {
  ///      // ICollection implementation elided for clarity...
  ///      
  ///      public void Add(object o)
  ///      {
  ///        // implementation elided for clarity...
  ///      }
  ///    }
  ///    
  ///    public class ManagedBag : Bag, IManagedCollection
  ///    {
  ///      public ICollection Resolve(
  ///        string objectName, RootObjectDefinition definition,
  ///        string propertyName, ManagedCollectionElementResolver resolver)
  ///      {
  ///        Bag newBag = new Bag();
  ///        string elementName = propertyName + "[bag-element]";
  ///        foreach(object element in this)
  ///        {
  ///          object resolvedElement = resolver(objectName, definition, elementName, element);
  ///          newBag.Add(resolvedElement);
  ///        }
  ///        return newBag;
  ///      }
  ///    }
  /// }
  /// </code>
  /// </example>
  /// <author>Rick Evans</author>
  public interface IManagedCollection : ICollection
  {
    /// <summary>
    /// Resolves this managed collection at runtime.
    /// </summary>
    /// <param name="objectName">
    /// The name of the top level object that is having the value of one of it's
    /// collection properties resolved.
    /// </param>
    /// <param name="definition">
    /// The definition of the named top level object.
    /// </param>
    /// <param name="propertyName">
    /// The name of the property the value of which is being resolved.
    /// </param>
    /// <param name="resolver">
    /// The callback that will actually do the donkey work of resolving
    /// this managed collection.
    /// </param>
    /// <returns>A fully resolved collection.</returns>
    ICollection Resolve(string objectName, IObjectDefinition definition,
      string propertyName, ManagedCollectionElementResolver resolver);
  }

  /// <summary>
  /// Resolves a single element value of a managed collection.
  /// </summary>
  /// <remarks>
  /// <p>
  /// If the <paramref name="element"/> does not need to be resolved or
  /// converted to an appropriate <see cref="System.Type"/>, the
  /// <paramref name="element"/> will be returned as-is.
  /// </p>
  /// </remarks>
  /// <param name="name">
  /// The name of the top level object that is having the value of one of it's
  /// collection properties resolved.
  /// </param>
  /// <param name="definition">
  /// The definition of the named top level object.
  /// </param>
  /// <param name="argumentName">
  /// The name of the property the value of which is being resolved.
  /// </param>
  /// <param name="element">
  /// That element of a managed collection that may need to be resolved
  /// to a concrete value.
  /// </param>
  /// <returns>A fully resolved element.</returns>
  public delegate object ManagedCollectionElementResolver(
    string name, IObjectDefinition definition, string argumentName, object element);
}
www.java2v.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.