2016-08-23 15 views
11

ビューコンポーネント:ビュー〜/ビューで適切なコンストラクタ

public class WidgetViewComponent : ViewComponent 
{ 
    private readonly IWidgetService _WidgetService; 

    private WidgetViewComponent(IWidgetService widgetService) 
    { 
     _WidgetService = widgetService; 
    } 

    public async Task<IViewComponentResult> InvokeAsync(int widgetId) 
    { 
     var widget = await _WidgetService.GetWidgetById(widgetId); 
     return View(widget); 
    } 
} 

/従業員/ Details.cshtml

@await Component.InvokeAsync("Widget", new { WidgetId = Model.WidgetId }) 

ビューコンポーネントは〜ビューに位置しています/Shared/Components/Widget/Default.cshtml

私が受け取るエラーは以下の通りです:

InvalidOperationException:タイプ 'MyApp.ViewComponents.WidgetViewComponent'の適切なコンストラクタを見つけることができませんでした。型が具体的であり、パブリックコンストラクタのすべてのパラメータに対してサービスが登録されていることを確認します。

答えて

30

問題は、あなたのコンストラクタがプライベートであることである:

private WidgetViewComponent(IWidgetService widgetService) 
{ 
    _WidgetService = widgetService; 
} 

そうDIがそれにアクセスすることはできません、公開する必要があります:

public WidgetViewComponent(IWidgetService widgetService) 
{ 
    _WidgetService = widgetService; 
} 
関連する問題