Проблема в японском иероглифе, который по моему запросу. Я пытался сначала закодировать его в utf-8, прежде чем выполнить запрос, но он не сработал.
, поэтому я создал вид и изменил имя столбца всех таблиц с японского на обычный алфавит, и это сработало. Я также попытался использовать pymssql вместо pyodbc, и эта проблема не появилась, даже если столбец моей таблицы на японском языке.
спасибо.
Круто. Эта функция еще не находится в единице, но если бы Вы чувствовали себя немного амбициозными, то Вы могли бы установить свою собственную основанную на конвенции регистрацию. Найденный ниже отрезанный, который работает на выполняющийся блок и интерфейсы. Удачи.
P.S. Это чувствует себя подобно большому взлому, я, вероятно, продолжил бы просто регистрировать все типы вручную.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Forum
{
class Program
{
static void Main(string[] args)
{
// get your assemblies and types you can register
Assembly a = Assembly.GetExecutingAssembly();
var types = a.GetTypes();
var bindTo = from t in types
where t.IsAbstract || t.IsInterface
select t;
// apply your conventions to filter our types to be registered
var interfacePairs = from t in bindTo.Where(x => x.IsInterface)
let match = types.FirstOrDefault(x => x.Name == t.Name.Substring(1))
where match != null
select new Pair { To = t, From = match };
var abstractPairs = new Pair[] {};
// setup the generic form of the method to register the types
var thisType = typeof(Program);
var bindings = BindingFlags.Static | BindingFlags.Public;
MethodInfo genericMethod = thisType.GetMethod("RegisterType", bindings);
// register all your types by executing the
// specialized generic form of the method
foreach (var t in interfacePairs.Concat(abstractPairs))
{
Type[] genericArguments = new Type[] { t.To, t.From };
MethodInfo method = genericMethod.MakeGenericMethod(genericArguments);
method.Invoke(null, new object [] {});
}
Console.ReadKey();
}
public static void RegisterType<To, From>()
{
Console.WriteLine("Register { To: {0} From: {1} }", typeof(To), typeof(From));
}
// Test classes that should be picked up
interface ITest { }
class Test : ITest { }
class Pair
{
public Type To { get; set; }
public Type From { get; set; }
}
}
}
AFAIK там не является никаким способом сделать это в Единице. Единица является просто намного менее сформировавшимся и худшим спроектированным контейнером, чем Виндзор, и в результате этого, много вещей более тверды/невозможны с ним.
Check this out:
var container = new UnityContainer();
container
.ConfigureAutoRegistration()
.LoadAssemblyFrom("Plugin.dll")
.IncludeAllLoadedAssemblies()
.ExcludeSystemAssemblies()
.ExcludeAssemblies(a => a.GetName().FullName.Contains("Test"))
.Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode())
.Include(If.ImplementsITypeName, Then.Register().WithTypeName())
.Include(If.Implements<ICustomerRepository>, Then.Register().WithName("Sample"))
.Include(If.Implements<IOrderRepository>,
Then.Register().AsSingleInterfaceOfType().UsingPerCallMode())
.Include(If.DecoratedWith<LoggerAttribute>,
Then.Register()
.AsInterface<IDisposable>()
.WithTypeName()
.UsingLifetime<MyLifetimeManager>())
.Exclude(t => t.Name.Contains("Trace"))
.ApplyAutoRegistration();
Я только что наткнулся на этот вопрос, ища информацию о регистрации на основе соглашений для Виндзора, и хотя это довольно старый вопрос, я подумал, что оставлю ответ для тех, кто может искать возможности такого рода в Unity.
В прошлом году я написал расширение для регистрации на основе соглашений для Unity, о котором вы можете прочитать здесь . Фактическая загрузка доступна в Google с кодом здесь . Основное использование:
_container
.Using<IConventionExtension>()
.Configure(x =>
{
x.Conventions.Add<InterfaceImplementionNameMatchConvention>();
x.Assemblies.Add(Assembly.GetExecutingAssembly());
})
.Register();
Существует также ClosingTypeConvention для автоматической регистрации открытых универсальных типов:
_container
.Using<IConventionExtension>()
.Configure(x =>
{
x.Conventions.Add(new ClosingTypeConvention(typeof (IRepository<>)));
x.Assemblies.Add(Assembly.GetExecutingAssembly());
})
.Register();