本文整理汇总了C#中IRegistration.GetInstance方法的典型用法代码示例。如果您正苦于以下问题:C# IRegistration.GetInstance方法的具体用法?C# IRegistration.GetInstance怎么用?C# IRegistration.GetInstance使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IRegistration
的用法示例。
在下文中一共展示了IRegistration.GetInstance方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CompileRegistrationIntoExpression
protected virtual Expression CompileRegistrationIntoExpression(IRegistration registration)
{
if (registration == null)
throw new ArgumentNullException("registration");
// Check if it is an InstanceRegistration<>
if (ReflectionHelper.IsInstanceOfGenericType(typeof(InstanceRegistration<>), registration) && _targetRegistration.CompileMode == CompileMode.Delegate)
{
var instance = registration.GetInstance();
return ConstantExpression.Constant(instance);
}
// Check if it is an IExpressionRegistration
var expReg = registration as IExpressionRegistration;
if (expReg != null)
{
// Check if the lifetime can be compiled
if (expReg.Lifetime is TransientLifetime)
{
// Keep visiting and try to inline the expression of the Registration found
// Recursive call until deepest nested ExpressionRegistration with TransientLifetime is found
// About to visit a child to the current - current becomes parent and registration/child to visit becomes current
var parent = _currentVisitedRegistration;
_currentVisitedRegistration = expReg;
// Visit - visit the body and return it so it is inlined within the original Expression<Func<IResolver, object>>
var expression = Visit(expReg.Expression.Body);
// Returned from visiting child - change it back again
_currentVisitedRegistration = parent;
return expression;
}
if (expReg.Lifetime is ContainerLifetime && _targetRegistration.CompileMode == CompileMode.Delegate)
{
var instance = expReg.GetInstance();
return ConstantExpression.Constant(instance);
}
}
// Returning null will make it keep visiting
return null;
}