4
A
답변
6
등록되지 않은 콘크리트 유형을 컨테이너에서 해결할 수있는 또 다른 방법입니다. 모든 autofac 생성자가 논리를 찾고 선택하면 모든 등록 이벤트 핸들러가 그대로 유지됩니다.
public static object ResolveUnregistered(this IComponentContext context, Type serviceType, IEnumerable<Parameter> parameters)
{
var scope = context.Resolve<ILifetimeScope>();
using (var innerScope = scope.BeginLifetimeScope(b => b.RegisterType(serviceType)))
{
IComponentRegistration reg;
innerScope.ComponentRegistry.TryGetRegistration(new TypedService(serviceType), out reg);
return context.ResolveComponent(reg, parameters);
}
}
아이디어는 당신이 파생 된 상황에서 구성 요소 등록을 취득하고 현재의 상황에서이를 해결한다는 것입니다 :
첫째, 당신은이 방법을 정의합니다. 그런 다음 몇 가지 편리한 오버로드를 만들 수 있습니다.
public static object ResolveUnregistered(this IComponentContext context, Type serviceType)
{
return ResolveUnregistered(context, serviceType, Enumerable.Empty<Parameter>());
}
public static object ResolveUnregistered(this IComponentContext context, Type serviceType, params Parameter[] parameters)
{
return ResolveUnregistered(context, serviceType, (IEnumerable<Parameter>)parameters);
}
public static TService ResolveUnregistered<TService>(this IComponentContext context)
{
return (TService)ResolveUnregistered(context, typeof(TService), Enumerable.Empty<Parameter>());
}
public static TService ResolveUnregistered<TService>(this IComponentContext context, params Parameter[] parameters)
{
return (TService)ResolveUnregistered(context, typeof(TService), (IEnumerable<Parameter>)parameters);
}
3
맞춤 코드가 필요한 해결책을 찾았습니다. Somethings는 내 앱에만 한정되어 있지만 사진을 얻을 수 있다고 생각합니다.
Resolve (parameter.ParameterType)는 컨테이너에 대한 호출입니다.
안녕하세요 Paul -이 점에 대해 더 자세히 설명하면 도움이 될 것입니다. 건배! –