こんにちは、インターフェイスに複数の実装がある場合、それらを異なるクラスに注入したいことを Unity に伝えるのに苦労しています。
インターフェイスIProductCatalogService
と 2 つの実装
ProductCatalog : IProductCatalogService
とProductCatalogService : IProductCatalogService
.
ProductCatalog
クラス AI の場合はコンストラクターで type のインスタンスを渡し、クラスの場合は のB
インスタンスが必要であることを Unity に伝えるにはどうすればよいでしょうかProductCatalogService
。
ASP.NET Web API プロジェクトで Unity を使用しており、リゾルバーを に設定しましたGLobalConfiguration
。
単純な 1 対 1 の登録では、すべてが機能します。
これが私が試したことですが、うまくいかないようです:
public class DependencyServiceModel
{
public Type From { get; set; }
public Type To { get; set; }
public IEnumerable<Type> ForClasses { get; set; }
}
public void RegisterTypeForSpecificClasses(DependencyServiceModel dependencyService)
{
foreach (var forClass in dependencyService.ForClasses)
{
string uniquename = Guid.NewGuid().ToString();
Container.RegisterType(dependencyService.From,
dependencyService.To, uniquename);
Container.RegisterType(forClass, uniquename,
new InjectionConstructor(
new ResolvedParameter(dependencyService.To)));
}
}
ではDependencyServiceModel
、From
はインターフェイス、To
はインスタンス化するオブジェクト、 はオブジェクトForClasses
を使用するタイプですTo
。