私は同じインタフェースから派生した複数の型を持っています。そして私は、私は、私はすべての問題なしに、以下のようなタイプを解決することができますUnity:現在のタイプ 'XXXXX'はインタフェースであり、構築できません。型マッピングがありませんか?
container.RegisterType<IService, ServiceA>("NameA");
container.RegisterType<IService, ServiceB>("NameB");
container.RegisterType<IService, ServiceC>("NameC");
以下のように、これらのタイプを登録する場合は種類
public interface IService
{
}
public class ServiceA : IService
{
}
public class ServiceB : IService
{
}
public class ServiceC : IService
{
}
を登録するにはユニティIOCコンテナを使用しています。
var service = container.Resolve<IService>("NameA");
しかし、私は外部からコンテナに登録する必要があるタイプのリストを取得しています。 (テキストファイルから想定する)。だから私は、提供されたリストにあるタイプだけを登録する必要があります。
public class Program
{
public static void Main()
{
// i will be getting this dictionary values from somewhere outside of application
// but for testing im putting it here
var list = new Dictionary<string, string>();
list.Add("NameA", "ServiceA");
list.Add("NameB", "ServiceB");
list.Add("NameC", "ServiceC");
var container = new UnityContainer();
var thisAssemebly = Assembly.GetExecutingAssembly();
//register types only that are in the dictionary
foreach (var item in list)
{
var t = thisAssemebly.ExportedTypes.First(x => x.Name == item.Value);
container.RegisterType(t, item.Key);
}
// try to resolve. I get error here
var service = container.Resolve<IService>("NameA");
}
}
私はタイプ 'Microsoft.Practices.Unity.ResolutionFailedException' の未処理の例外が Microsoft.Practices.Unity.dll
追加情報で発生した例外
を取得しています:解像度依存関係が失敗した場合は、タイプ= "ConsoleApplication1.IService"、name = "NameA"と入力します。
例外が発生しました:解決中です。
例外:InvalidOperationException - 現在のタイプ ConsoleApplication1.IServiceがインタフェースであり、 を構築できません。型マッピングがありませんか?例外の時点で
、コンテナがした
解決ConsoleApplication1.IService、NameA
私は大会オプションでユニティのレジスタを使用したくないいくつかの正当な理由のために、またはUnityの設定ファイルオプションを使用してタイプを登録します。私が持っているリストに基づいてそれらを登録したいと思います。