XML 構成を介して Unity 3.0 を構成する際に問題が発生しています。ジェネリック型を解決すると、次の例外メッセージが表示されます。
タイプ INLog`1 には、アクセス可能なコンストラクターがありません。
私のロギングクラスのレイアウトは次のとおりです。
namespace Common.Utils.Logging {
public interface INLog
{
}
public interface INLog<T> : INLog where T : class
{
}
public class NLog : INLog
{
public NLog(Type type)
{
}
}
public class NLog<T> : NLog, INLog<T>
where T : class
{
public NLog()
: base(typeof(T))
{
}
}
}
ジェネリック型を次の XML コードに登録します。
<type type="Common.Utils.Logging.INLog[], Common.Utils" mapTo="Common.Utils.Logging.NLog[], Common.Utils" />
この構成をロードすると、次のコンテナーが登録されます。
LifetimeManager: {Microsoft.Practices.Unity.TransientLifetimeManager} LifetimeManagerType: {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"} MappedToType: {Name = "NLog[]" FullName = "Common.Utils.Logging.NLog[]"} Name: null RegisteredType: {Name = "INLog[]" FullName = "Common.Utils.Logging.INLog[]"}
私が期待している登録の代わりに、つまり:
LifetimeManager: null LifetimeManagerType: {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"} MappedToType: {Name = "NLog`1" FullName = "Common.Utils.Logging.NLog`1"} Name: null RegisteredType: {Name = "INLog`1" FullName = "Common.Utils.Logging.INLog`1"}
コードでの登録は問題なく機能し、期待どおりの登録が得られます。
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType(typeof(INLog<>), typeof(NLog<>));
}
しかし、構成ファイルを介して正しくロードすることができません。これは、非ジェネリック型 (I)NLog の継承に関係していると思います...
これを修正する方法を知っている人はいますか?
よろしく、リック