1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle
.MonoRail
.Framework
.Providers
17 using System
.Reflection
;
18 using Castle
.Core
.Logging
;
19 using Castle
.MonoRail
.Framework
.Descriptors
;
22 /// Creates <see cref="LayoutDescriptor"/> from attributes
23 /// associated with the <see cref="IController"/> and its actions
25 public class DefaultLayoutDescriptorProvider
: ILayoutDescriptorProvider
28 /// The logger instance
30 private ILogger logger
= NullLogger
.Instance
;
32 #region IMRServiceEnabled implementation
35 /// Invoked by the framework in order to give a chance to
36 /// obtain other services
38 /// <param name="provider">The service proviver</param>
39 public void Service(IMonoRailServices provider
)
41 ILoggerFactory loggerFactory
= (ILoggerFactory
) provider
.GetService(typeof(ILoggerFactory
));
43 if (loggerFactory
!= null)
45 logger
= loggerFactory
.Create(typeof(DefaultLayoutDescriptorProvider
));
52 /// Implementors should collect the layout information
53 /// and return a descriptor instance, or null if none
56 /// <param name="memberInfo">The controller type or action (MethodInfo)</param>
58 /// An <see cref="LayoutDescriptor"/> instance
60 public LayoutDescriptor
CollectLayout(MemberInfo memberInfo
)
62 if (logger
.IsDebugEnabled
)
64 logger
.DebugFormat("Collecting layout information for {0}", memberInfo
.Name
);
67 object[] attributes
= memberInfo
.GetCustomAttributes(typeof(ILayoutDescriptorBuilder
), true);
69 if (attributes
.Length
== 1)
71 LayoutDescriptor desc
= (attributes
[0] as ILayoutDescriptorBuilder
).BuildLayoutDescriptor();