ユニティ依存性の注入C#でジェネリックインターフェイスのIEnumerableをを注入します。私はと呼ばれるインターフェース作りたいは、私は、Web API 2アプリケーションでの作業とユニティ依存性注入を使用しています
...名、ブランド、タイプ:
私は、フィルタの複数の種類がありIFilterServiceをし、それを実装するために他のすべてのクラスを強制し、私が呼ぶこのインタフェースのIEnumerableをとそれを正しいタイプで注入してください。
インタフェースは次のとおりです。
public interface IFilterService<T>
{
bool CanHandle(FilterType type);
Task<ServiceResult<T>> FilterAsync(T entity);
}
とクラスのようなものです:
public class NameService : IFilterService<Name>
{
public bool CanHandle(FacetType type)
{
return type == FacetType.Name;
}
public async Task<ServiceResult<Name>> FilterAsync(Name entity)
{
// Code
}
}
コントローラのようなある:
public class FilterController
{
private readonly IEnumerable<IFilterService> filters;
public MediaController(IEnumerable<IFilterService> filters)
{
this.filters = filters;
}
public async Task<HttpResponseMessage> FilterAsync(FilterType type, Name entity)
{
foreach(var filter in this.filters.Where(x => x.CanHandle(type)))
{
filter.FilterAsync(entity);
}
....
}
}
すべてが正しく動作している:唯一の問題はですUnity Dependency Injectionにインターフェイスとクラスを登録します。
container.RegisterType<IEnumerable<IFilterService>, IFilterService[] >(
new ContainerControlledLifetimeManager());
container.RegisterType<IFilterService, NameService>("Name Service",
new ContainerControlledLifetimeManager());
私はこのエラーが発生します:
Error CS0305 Using the generic type 'IFilterService' requires 1 type arguments
私はそれを試してみましたが、非ジェネリックインターフェイスを持つと正常に動作したのと同じコード。
どのようにエラーを修正するには?少しの説明は非常に便利です。ありがとうございました。
2番目のソリューションで返される値は何ですか? –
'タスク>'あなたの例のコントローラは、タスク 'で' T '行くから返される> 'entity'だったどんなタイプ'になります。 –
私は2つの機能にしてそれを分割することによって返されるために何が起こっているか、それはもう少し明確にするために第二の例を更新しました。 –