本文整理汇总了C#中IBuildContext.CanUseBuildUp方法的典型用法代码示例。如果您正苦于以下问题:C# IBuildContext.CanUseBuildUp方法的具体用法?C# IBuildContext.CanUseBuildUp怎么用?C# IBuildContext.CanUseBuildUp使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IBuildContext
的用法示例。
在下文中一共展示了IBuildContext.CanUseBuildUp方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnPerpare
/// <summary>
/// The on perpare.
/// </summary>
/// <param name="context">
/// The context.
/// </param>
public override void OnPerpare(IBuildContext context)
{
if (!context.CanUseBuildUp()) return;
context.ErrorTracer.Phase = "Reciving Interception Informations for " + context.Metadata;
var contextPolicy = new ObjectContextPolicy
{
ContextName =
context.Metadata.Metadata.TryGetAndCast<string>(
AopConstants.ContextMetadataName)
};
foreach (MemberInfo memberInfo in context.ExportType.GetMembers(AopConstants.DefaultBindingFlags))
{
Contract.Assume(memberInfo != null);
ObjectContextPropertyAttribute[] attrs =
memberInfo.GetAllCustomAttributes<ObjectContextPropertyAttribute>();
foreach (ObjectContextPropertyAttribute objectContextPropertyAttribute in attrs) contextPolicy.ContextPropertys.Add(Tuple.Create(objectContextPropertyAttribute, memberInfo));
}
context.Policys.Add(contextPolicy);
var attr = context.Metadata.Metadata.TryGetAndCast<InterceptAttribute>(AopConstants.InterceptMetadataName);
object meta;
if (context.Metadata.Metadata.TryGetValue("IgnoreIntercepion", out meta))
{
try
{
if((bool)meta)
return;
}
catch (InvalidCastException)
{
}
}
if (attr == null) return;
var policy = new InterceptionPolicy {InterceptAttribute = attr};
IInterceptor temp = attr.Create();
if (temp != null) policy.MemberInterceptor.Add(new KeyValuePair<MemberInterceptionAttribute, IInterceptor>(null, temp));
foreach (MemberInterceptionAttribute attribute in
context.ExportType.GetAllCustomAttributes<MemberInterceptionAttribute>())
{
policy.MemberInterceptor.Add(
new KeyValuePair<MemberInterceptionAttribute, IInterceptor>(
attribute,
attribute.Create(context.ExportType)));
}
foreach (MemberInfo member in context.ExportType.GetMembers(AopConstants.DefaultBindingFlags))
{
Contract.Assume(member != null);
MemberInterceptionAttribute[] intattrs = member.GetAllCustomAttributes<MemberInterceptionAttribute>();
foreach (MemberInterceptionAttribute interceptionAttribute in intattrs)
{
Contract.Assert(interceptionAttribute != null);
IInterceptor temp2 = interceptionAttribute.Create(member);
policy.MemberInterceptor.Add(
new KeyValuePair<MemberInterceptionAttribute, IInterceptor>(
interceptionAttribute, temp2));
}
}
context.Policys.Add(policy);
}
示例2: OnBuild
/// <summary>
/// The on build.
/// </summary>
/// <param name="context">
/// The context.
/// </param>
public override void OnBuild(IBuildContext context)
{
if (!context.CanUseBuildUp()) return;
context.ErrorTracer.Phase = "Setting up ObjectContext for " + context.Metadata;
var contextPolicy = context.Policys.Get<ObjectContextPolicy>();
Contract.Assume(contextPolicy != null);
ObjectContext objectContext;
string name = contextPolicy.ContextName;
if (name != null) objectContext = ContextManager.GetContext(name, context.Target);
else
{
var holder = context.Target as IContextHolder;
name = Guid.NewGuid().ToString();
if (holder != null)
{
if (holder.Context == null) holder.Context = ContextManager.GetContext(name, context.Target);
objectContext = holder.Context;
}
else
{
object obj = context.Target;
Contract.Assume(obj != null);
objectContext = ContextManager.GetContext(name, obj);
}
}
foreach (var contextProperty in contextPolicy.ContextPropertys) contextProperty.Item1.Register(objectContext, contextProperty.Item2, context.Target);
var policy = context.Policys.Get<InterceptionPolicy>();
if (policy == null || context.Target == null) return;
var options = new ProxyGenerationOptions {Selector = new InternalInterceptorSelector()};
try
{
if (ProxyUtil.IsProxy(context.Target)) return;
context.ErrorTracer.Phase = "Creating Proxy with Target for " + context.Metadata;
lock (_generator)
{
context.Target = _generator.CreateClassProxyWithTarget(
context.ExportType,
context.Target,
options,
policy.MemberInterceptor.Select(
mem =>
mem.Value)
.ToArray());
}
}
finally
{
foreach (MemberInterceptionAttribute result in
policy.MemberInterceptor.Select(mem => mem.Key).Where(attr => attr != null)) result.Initialize(context.Target, objectContext, name);
}
}
示例3: OnPerpare
/// <summary>
/// The on perpare.
/// </summary>
/// <param name="context">
/// The context.
/// </param>
public override void OnPerpare(IBuildContext context)
{
if (!context.CanUseBuildUp()) return;
context.ErrorTracer.Phase = "Loading Injections for " + context.Metadata;
MemberInfo[] members = context.ExportType.GetMembers(AopConstants.DefaultBindingFlags);
List<IImportInterceptor> importInterceptors = null;
var intpol = context.Policys.Get<ExternalImportInterceptorPolicy>();
if (intpol != null) importInterceptors = intpol.Interceptors;
foreach (
var temp in
_interceptorFactories.Select(
importInterceptorFactory => importInterceptorFactory.CreateInterceptor(context.Metadata))
.Where(temp => temp != null))
{
if (importInterceptors == null) importInterceptors = new List<IImportInterceptor> {temp};
else importInterceptors.Add(temp);
}
foreach (ImportMetadata importMetadata in context.Metadata.Export.ImportMetadata)
{
var policy = new InjectMemberPolicy {Metadata = importMetadata, Interceptors = importInterceptors};
MemberInfo info = members.FirstOrDefault(inf => inf.Name == importMetadata.MemberName);
if (info == null) continue;
switch (info.MemberType)
{
case MemberTypes.Event:
policy.Injector = new EventMemberInjector(importMetadata, _eventManager, info);
break;
case MemberTypes.Field:
policy.Injector = new FieldInjector(_factory, (FieldInfo) info, context.ResolverExtensions);
break;
case MemberTypes.Property:
policy.Injector = new PropertyInjector(_factory, (PropertyInfo) info, context.ResolverExtensions);
break;
case MemberTypes.Method:
policy.Injector = new MethodInjector((MethodInfo) info, _factory, _eventManager, context.ResolverExtensions);
break;
}
context.Policys.Add(policy);
}
}