Я не вижу, как это возможно из коробки. Хотя создать такое ядро не очень сложно.
Этот образец, конечно, очень минималистский, хотя он должен показать вам, как это можно сделать. Или, может быть, есть кто-то, у кого больше знаний о внутренностях Ninject.
public class NamespaceFilteringMockMissingBindingsResolver : MockMissingBindingResolver
{
public NamespaceFilteringMockMissingBindingsResolver(IMockProviderCallbackProvider mockProviderCallbackProvider)
: base(mockProviderCallbackProvider)
{
}
protected override bool TypeIsInterfaceOrAbstract(Type service)
{
return base.TypeIsInterfaceOrAbstract(service) && service.Namespace != null && service.Namespace.StartsWith("YourNamespace");
}
}
public class CustomNSubstituteMockingKernel : NSubstituteMockingKernel
{
public CustomNSubstituteMockingKernel()
{
this.AddComponents();
}
public CustomNSubstituteMockingKernel(INinjectSettings settings, params INinjectModule[] modules)
: base(settings, modules)
{
this.AddComponents();
}
private new void AddComponents()
{
this.Components.RemoveAll<IMissingBindingResolver>();
this.Components.Add<IMissingBindingResolver, SingletonSelfBindingResolver>();
this.Components.Add<IMissingBindingResolver, NamespaceFilteringMockMissingBindingsResolver>();
}
}
Update Вы правы, вам не нужно, чтобы создать свое собственное ядро. Вы также можете сделать это так.
var kernel = new NSubstituteMockingKernel();
kernel.Components.RemoveAll<IMissingBindingResolver>();
kernel.Components.Add<IMissingBindingResolver, SingletonSelfBindingResolver>();
kernel.Components.Add<IMissingBindingResolver, NamespaceFilteringMockMissingBindingsResolver>();
Создание собственного ядра может быть более удобным, чем всегда писать эти дополнительные строки. Или вы создаете какой-то заводский метод.
Блестящий, спасибо. Является ли 'Components' частным, и вы создали новое ядро вместо добавления к существующим компонентам? – georgiosd