Vous pouvez créer une stratégie de constructeur personnalisé et vérifier si le type est enregistré dans le contenant:
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.AddNewExtension<FactoryUnityExtension>();
try
{
container.Resolve<Program>();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
container.RegisterType<Program>();
var v = container.Resolve<Program>();
Console.WriteLine(v);
}
}
public class CustomFactoryBuildStrategy : BuilderStrategy
{
private ExtensionContext baseContext;
public CustomFactoryBuildStrategy(ExtensionContext baseContext)
{
this.baseContext = baseContext;
}
public override void PreBuildUp(IBuilderContext context)
{
var key = (NamedTypeBuildKey)context.OriginalBuildKey;
if (baseContext.Container.Registrations.All(o => o.RegisteredType != key.Type))
{
throw new InvalidOperationException();
}
}
}
public class FactoryUnityExtension : UnityContainerExtension
{
private CustomFactoryBuildStrategy strategy;
protected override void Initialize()
{
this.strategy = new CustomFactoryBuildStrategy(Context);
Context.Strategies.Add(strategy, UnityBuildStage.PreCreation);
}
}
@ArturShamsutdinov avez-vous essayé cette solution? – Backs