/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 *
 *************************************************************/


#ifndef __com_sun_star_lang_XSingleComponentFactory_idl__
#define __com_sun_star_lang_XSingleComponentFactory_idl__

#ifndef __com_sun_star_uno_XComponentContext_idl__
#include <com/sun/star/uno/XComponentContext.idl>
#endif


//=============================================================================

module com {  module sun {  module star {  module lang {

/** Factory interface to create instances of an implementation of a service
    specification.

	@see XInitialization
*/
published interface XSingleComponentFactory : com::sun::star::uno::XInterface
{
	/** Creates an instance of a service implementation.

        @param Context
               the instance gets its deployment values from this
        @return
                component instance
    */
	com::sun::star::uno::XInterface createInstanceWithContext(
        [in] com::sun::star::uno::XComponentContext Context )
        raises (com::sun::star::uno::Exception);

	/** Creates an instance of a component and initializes the new instance
        with the given arguments and context.

        @param Arguments
               arguments passed to implementation
        @param Context
               the instance gets its deployment values from this
        @return
                component instance
    */
	com::sun::star::uno::XInterface createInstanceWithArgumentsAndContext(
        [in] sequence<any> Arguments,
        [in] com::sun::star::uno::XComponentContext Context )
        raises( com::sun::star::uno::Exception );
};

}; }; }; };

#endif
