Мне удалось воспроизвести вашу проблему. Похоже, что изменение, внесенное в pyodbc 4.0.25, вызывает проблемы с запросами к базе данных Access, когда эти запросы используют целочисленные параметры.
О проблеме сообщалось на GitHub здесь . В то же время, понизить до pyodbc 4.0.24.
Если у вас по-прежнему возникают проблемы после перехода на 4.0.24, проблема может быть связана с самой базой данных. Пожалуйста, рассмотрите возможность открытия отдельного выпуска GitHub с помощью MCVE и примера базы данных, которая может воспроизвести проблему.
Я использую Ninject и StructureMap - оба позволяют Вам обеспечивать электричеством свою конфигурацию без XML.
Для не бесстыдного продвижения моего сайта, но я записал учебное руководство при использовании Ninject, доступного здесь.
Возможно, можно ли использовать DI без контейнера?
Вот пример, который использует инжекцию конструктора:
public static void Main() {
ILogger logger = new FileLogger();
ISession session = new ConcreteSession();
IRepository repository = new MyDataRepositoryImpl(session, logger);
IApplication app = new MyApplication();
app.AddModule(new DataSelector(repository));
app.AddModule(new Editor(repository, new MyEditorFactory(session)));
app.AddModule(new LdapAuthenticator(session, logger));
// ...
app.Run();
}
Если Вы сделаете это этот путь, то Ваш исполняемый модуль будет иметь зависимости ко всему, таким образом, необходимо будет ограничить его ответственность перед просто включающимися вещами вместе. Можно сохранить объем кода приложения чистым в других модулях.
Часто Вам не нужны усовершенствованные платформы для управления зависимостями с инжекцией.
Я думаю, что Вы будете находить эту функцию в большинстве контейнеров там. Смотрите на это сообщение в блоге. Это немного в возрасте, но это даст Вам общее представление. К настоящему времени активные контейнеры, вероятно, имеют лучшую поддержку.
Попробуйте LinFu. Это - один из большинства самых легких и гибких контейнеров там и требует наименьшего количества объема кода, и это - единственный контейнер во что сравнение контейнера МОК для передачи ВСЕХ тестов. Наслаждаться :)
Последняя версия StructureMap, 2.5.2, не только позволяет Вам настроить свой контейнер без XML, как Ryan сказал, но это также имеет способность к вещам AutoWire согласно конвенции, которая, кажется, точно, что Вы ищете.
ObjectFactory.Initialize(x => x.Scan(scanner =>
{
scanner.TheCallingAssembly();
scanner.WithDefaultConventions();
}));;
Из документов о IAssemblyScanner. WithDefaultConvents ():
Добавляет DefaultConventionScanner к операции сканирования. т.е. реальный класс под названием "Что-то", что реализует "ISomething", будет автоматически добавлен к PluginType "ISomething"
Я лично не сделал многого с ним, поскольку у меня уже была существующая конфигурация, которая использовала Быстрый Интерфейс. Но это выглядит многообещающим.
Править: Jeremy Miller просто поднял сообщение о том, как создать Ваши СОБСТВЕННЫЕ Конвенции...
Замок Windsor позволяет это через вызовы Регистра. Простой сценарий, скажем, у Вас есть много Контроллеров, которые реализуют интерфейс IController:
container.Register(AllTypes.FromAssembly(assemblyA).BasedOn(typeof(IController));
Можно упростить это далее путем создания интерфейса IService (никакие участники) и добавления его к вышеупомянутому. Этот путь при создании сервиса он автоматически регистрируется.