私はフックを見つけました。
まず、あなたが新しいマッピングのルックアップしますBuilderStrategy
を作成する必要があります。
public class DynamicMappingBuildStrategy: BuilderStrategy
{
public override void PreBuildUp(IBuilderContext context)
{
var policy = context.Policies.Get<IBuildKeyMappingPolicy>(context.BuildKey);
if (policy != null)
{
context.BuildKey = policy.Map(context.BuildKey, context);
}
else
{
var oldMapping = context.BuildKey;
var mappedType = DynamicMapper.GetMapping(oldMapping.Type);
context.BuildKey = new NamedTypeBuildKey(mappedType, null);
var lifetime = context.PersistentPolicies.Get<ILifetimePolicy>(oldMapping, true);
if (lifetime != null)
{
context.PersistentPolicies.Set(lifetime, context.BuildKey);
}
}
}
}
は、その後、あなたは正しいUnityBuildStage
でBuilderStrategy
を追加しますUnityContainerExtension
を作成する必要があります。
public class DynamicMappingBehaviorExtension : UnityContainerExtension
{
protected override void Initialize()
{
this.Context.Strategies.AddNew<DynamicMappingBuildStrategy>(UnityBuildStage.TypeMapping);
}
}
新しいコンテナを使用するようにコンテナを設定する必要があります。
<containers>
<container>
<extensions>
<add type="MyNamespace.DynamicMappingBehaviorExtension, MyDll" />
</extensions>
....More configuration.....
そして、あなたはmapToせずにあなたのタイプのマッピングを追加する必要があります。
<type type="IVehicle">
<lifetime type="Hierarchical" />
</type>
あなたは直接 'IMyInterface'を解決するつもりですか?最終的に 'IMyInterface'に依存する別の型ですか?あなたは例を挙げることができますか? –
私はapi呼び出しを行い、 "mapTo"型(IMyInterfaceを実装する)を選択するのに役立つヒントを得て、UnityContainerを新しいmapTo型にします。 mapの種類ランタイムファクトリです。 例:インターフェイスはIVehicleです。 IVehicleを解決する必要があるときには、マップされた型を計算する必要があります。私はAPIコールを実行し、正しいタイプ(この例ではTruckまたはSportsCarかもしれません)を返したいと思います。 –
具体的なタイプを直接解決してみませんか?例えばトラックまたはSportsCar –