8

コントローラでこの問題が発生しました:タイプ' * .WebMvc.Controllers.HomeController'
のコントローラを作成しようとしたときにエラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認してください。

ApiControllerの解決策を見つけましたが、通常のControllerについては何も見つかりませんでした。

新しいMVC4プロジェクトを最初から作成しました。

HomeController.cs:

public class HomeController : Controller
{
    private IAccountingUow _uow;
    public HomeController(IAccountingUow uow)
    {
        _uow = uow;
    }

UnityDependencyResoler.cs:

public class UnityDependencyResolver : IDependencyResolver
{
    private IUnityContainer _container;
    public UnityDependencyResolver(IUnityContainer container)
    {
        _container = container;
        RegisterTypes();
    }
    public object GetService(Type serviceType)
    {
        try
        {
            return _container.Resolve(serviceType);
        }catch
        {
            return null;
        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            return _container.ResolveAll(serviceType);
        }catch
        {
            return null;
        }
    }

    private void RegisterTypes()
    {
        _container.RegisterType<IAccountingUow, AccountingUow>();

    }
}

Global.asax

    protected void Application_Start()
    {
        //Omitted
        DependencyResolver.SetResolver( new UnityDependencyResolver( new UnityContainer()));

    }

デバッグして、IAccountingUowを解決する試みさえないことがわかりました。

私が間違っているのは何ですか?一日中考えています。

4

3 に答える 3

6

問題の場所が見つかりました。多分誰かが同じように直面するでしょう。IAccountingUow問題は、インターフェイスに対する階層的な依存関係が原因で、Unity が を解決できなかったことです。

AccountingUowクラスには 2 つのコンストラクターがあります

    public AccountingUow( IRepositoryProvider repositoryProvider)
    {
        Init(repositoryProvider);
    }
    public AccountingUow()
    {
        Init( new RepositoryProvider(new RepositoryFactories()) );
    }

Dependency Resolver は、デフォルトのパラメーターなしのコンストラクターを使用できるほどスマートではありません。インターフェイス依存のコンストラクターを取得しようとしましたが、解決に失敗しました。これは、解決するためのルールがないためです。

インターフェイス依存のコンストラクターをコメントアウトすると、すべて正常に機能しました。

後で最初のコンストラクターのリゾルバーを投稿します。おそらく誰かが使用するでしょう。

于 2012-11-13T09:50:54.997 に答える
3

これは、解決されている外部型のパラメーター注入コンストラクターでの例外が原因である可能性もあります。そのタイプのコンストラクターの依存関係は正常に解決されている可能性がありますが、外側のコンストラクターに例外がある場合、Unity はそれを「Type Test.Controllers.MyControllerWithInjectedDependenciesデフォルトのコンストラクターがありません」と報告します。

于 2016-11-15T02:29:21.803 に答える