Я использовал Autofac в качестве своего контейнера DI вместо TinyIoC, который по умолчанию используется в Nancy.Функциональное тестирование NancyFX с Autofac
У меня работает API, и я могу легко подключиться к нему через браузер, однако мои функциональные тесты не работают. Они терпят неудачу, потому что я пытаюсь использовать Nancy Browser для установки тестов, но для этого требуется TinyIoC Container (которого нет).
Есть ли простой способ расширить/переопределить браузер, чтобы взять контейнер Autofac вместо TinyIoC? Альтернативно (и, вероятно, лучше), существует ли Nancy.Testing Browser, который «может» использовать другой контейнер?
SetUp: System.InvalidOperationException: Что-то пошло не так, когда пытаясь удовлетворить одну из зависимостей во время композиции, сделать убедитесь, что вы зарегистрировали всю новую зависимость в контейнере и осмотреть InnerException для более подробной информации. ----> Nancy.TinyIoc.TinyIoCResolutionException: Не удалось разрешить тип: Nancy.NancyEngine ----> Nancy.TinyIoc.TinyIoCResolutionException: Не удалось разрешить тип: Nancy.Routing.DefaultRequestDispatcher ----> Nancy .TinyIoc.TinyIoCResolutionException: Не удалось разрешить тип: Nancy.Routing.DefaultRouteResolver ----> Nancy.TinyIoc.TinyIoCResolutionException: Не удается разрешить тип: Nancy.Routing.RouteCache ----> Nancy.TinyIoc.TinyIoCResolutionException : Не удается решить тип: TimeTracker.Web.Api.UserModule ----> Nancy.TinyIoc.TinyIoCResolutionException: Не удается решить тип: TimeTracker.Services.IUserService
Как вы можете видеть, TinyIoC не может разрешить IUserService.
Nancy.TinyIoc.TinyIoCResolutionException: Не удалось разрешить тип: TimeTracker.Services.IUserService
Это потому, что я не регистрации НИЧЕГО с TinyIoC ... Вместо того, чтобы я его регистрацию Autofac.
[TestFixtureSetUp]
public void Setup()
{
_browser = new Browser(with =>
{
with.Module<UserModule>();
// forcing me to use TinyIoCContainer
with.ApplicationStartup((x, pipelines) =>
{
var container = BootStrapper.ConfigureContainer(new ContainerBuilder().Build());
var userValidator = container.Resolve<IUserValidator>();
var basicAuthConfig = new BasicAuthenticationConfiguration(userValidator, "TimeTra.ca");
pipelines.EnableBasicAuthentication(basicAuthConfig);
pipelines.OnError.AddItemToEndOfPipeline(
(context, exception) => CustomErrorResponse.FromException(exception));
// Setup a clean database
var migrationRunner = new MigrationRunner(container.Resolve<IDbProvider>());
migrationRunner.DropDatabase();
migrationRunner.CreateDatabase();
BootStrapper.RunMigrations(container);
SeedData.SetupFixtureDataInDatabase(container.Resolve<IServiceLocator>());
});
});
}
private Browser _browser;
Кажется, что IUserService отсутствует. Вы пробовали использовать IUserService с помощью .Dependency? –
@ChristianHorsdal, к сожалению, не имеет к этому никакого отношения. Это факт, что я не использую контейнер по умолчанию, который хочет Нэнси. –
Откуда вы это знаете? - Мне это не кажется, из того, что вы разместили в вопросе. –