本文整理汇总了C#中Zenject.InjectContext.GetObjectGraphString方法的典型用法代码示例。如果您正苦于以下问题:C# InjectContext.GetObjectGraphString方法的具体用法?C# InjectContext.GetObjectGraphString怎么用?C# InjectContext.GetObjectGraphString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zenject.InjectContext
的用法示例。
在下文中一共展示了InjectContext.GetObjectGraphString方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetInstance
public override object GetInstance(InjectContext context)
{
Assert.That(_returnType.DerivesFromOrEqual(context.MemberType));
var obj = _method(context);
Assert.That(obj != null, () =>
"Method provider returned null when looking up type '{0}'. \nObject graph:\n{1}".Fmt(_returnType.Name(), context.GetObjectGraphString()));
return obj;
}
示例2: ValidateBinding
public override IEnumerable<ZenjectResolveException> ValidateBinding(InjectContext context)
{
if (!_creator.ContainsComponent(_concreteType))
{
yield return new ZenjectResolveException(
"Could not find component of type '{0}' in prefab with name '{1}' \nObject graph:\n{2}"
.Fmt(_concreteType.Name(), _creator.Prefab.name, context.GetObjectGraphString()));
yield break;
}
foreach (var err in BindingValidator.ValidateObjectGraph(_container, _concreteType, context, null))
{
yield return err;
}
}
示例3: GetInstance
public override object GetInstance(InjectContext context)
{
Assert.That(_componentType.DerivesFromOrEqual(context.MemberType));
if (_instance == null)
{
Assert.That(!_container.AllowNullBindings,
"Tried to instantiate a MonoBehaviour with type '{0}' during validation. Object graph: {1}", _componentType, context.GetObjectGraphString());
_instance = _gameObject.AddComponent(_componentType);
Assert.That(_instance != null);
_container.Inject(_instance);
}
return _instance;
}
示例4: GetInstance
public object GetInstance(InjectContext context)
{
Assert.That(ComponentType.DerivesFromOrEqual(context.MemberType));
if (_instance == null)
{
Assert.That(!_container.IsValidating,
"Tried to instantiate a MonoBehaviour with type '{0}' during validation. Object graph: {1}", ComponentType, context.GetObjectGraphString());
// Note that we always want to cache _container instead of using context.Container
// since for singletons, the container they are accessed from should not determine
// the container they are instantiated with
// Transients can do that but not singletons
_instance = GameObject.AddComponent(ComponentType);
Assert.That(_instance != null);
_container.Inject(_instance, new object[0], true, context);
}
return _instance;
}
示例5: ValidateBinding
public override IEnumerable<ZenjectResolveException> ValidateBinding(InjectContext context)
{
if (!_creator.ContainsComponent(_instanceType))
{
yield return new ZenjectResolveException(
"Could not find component of type '{0}' in prefab with name '{1}' \nObject graph:\n{2}"
.Fmt(_instanceType.Name(), _creator.Prefab.name, context.GetObjectGraphString()));
yield break;
}
// In most cases _instanceType will be a MonoBehaviour but we also want to allow interfaces
// And in that case we can't validate it
if (!_instanceType.IsAbstract)
{
// Note that we always want to cache _container instead of using context.Container
// since for singletons, the container they are accessed from should not determine
// the container they are instantiated with
// Transients can do that but not singletons
foreach (var err in _container.ValidateObjectGraph(_instanceType, context))
{
yield return err;
}
}
}
示例6: ValidateContract
public static IEnumerable<ZenjectResolveException> ValidateContract(DiContainer container, InjectContext context)
{
var matches = container.GetProviderMatches(context);
if (matches.Count == 1)
{
foreach (var error in matches.Single().ValidateBinding(context))
{
yield return error;
}
}
else
{
if (ReflectionUtil.IsGenericList(context.MemberType))
{
var subContext = context.ChangeMemberType(context.MemberType.GetGenericArguments().Single());
matches = container.GetProviderMatches(subContext);
if (matches.IsEmpty())
{
if (!context.Optional)
{
if (container.FallbackProvider != null)
{
foreach (var error in container.FallbackProvider.ValidateBinding(context))
{
yield return error;
}
}
else
{
yield return new ZenjectResolveException(
"Could not find dependency with type 'List<{0}>'{1}. If the empty list is also valid, you can allow this by using the [InjectOptional] attribute.' \nObject graph:\n{2}"
.Fmt(
subContext.MemberType.Name(),
(context.ObjectType == null ? "" : " when injecting into '{0}'".Fmt(context.ObjectType.Name())),
context.GetObjectGraphString()));
}
}
}
else
{
foreach (var match in matches)
{
foreach (var error in match.ValidateBinding(context))
{
yield return error;
}
}
}
}
else
{
if (!context.Optional)
{
if (matches.IsEmpty())
{
if (container.FallbackProvider != null)
{
foreach (var error in container.FallbackProvider.ValidateBinding(context))
{
yield return error;
}
}
else
{
yield return new ZenjectResolveException(
"Could not find required dependency with type '{0}'{1} \nObject graph:\n{2}"
.Fmt(
context.MemberType.Name(),
(context.ObjectType == null ? "" : " when injecting into '{0}'".Fmt(context.ObjectType.Name())),
context.GetObjectGraphString()));
}
}
else
{
yield return new ZenjectResolveException(
"Found multiple matches when only one was expected for dependency with type '{0}'{1} \nObject graph:\n{2}"
.Fmt(
context.MemberType.Name(),
(context.ObjectType == null ? "" : " when injecting into '{0}'".Fmt(context.ObjectType.Name())),
context.GetObjectGraphString()));
}
}
}
}
}
示例7: ValidateObjectGraph
public static IEnumerable<ZenjectResolveException> ValidateObjectGraph(
DiContainer container, Type concreteType, InjectContext currentContext, params Type[] extras)
{
var typeInfo = TypeAnalyzer.GetInfo(concreteType);
var extrasList = extras.ToList();
foreach (var dependInfo in typeInfo.AllInjectables)
{
Assert.IsEqual(dependInfo.ObjectType, concreteType);
if (TryTakingFromExtras(dependInfo.MemberType, extrasList))
{
continue;
}
var context = dependInfo.CreateInjectContext(container, currentContext, null);
foreach (var error in ValidateContract(container, context))
{
yield return error;
}
}
if (!extrasList.IsEmpty())
{
yield return new ZenjectResolveException(
"Found unnecessary extra parameters passed when injecting into '{0}' with types '{1}'. \nObject graph:\n{2}"
.Fmt(concreteType.Name(), String.Join(",", extrasList.Select(x => x.Name()).ToArray()), currentContext.GetObjectGraphString()));
}
}