2

Unity 1.1バージョンを使用していますが、コンストラクターを挿入できませんでした。私のコードは次のように急上昇します:

global.asax Application_Startupメソッドへの依存関係の登録:

Core.Instance.Container.RegisterType<ICartBusiness, CartBusiness>();

コンストラクターの挿入:

private ICartBusiness _business;
        public FooController(ICartBusiness business)
        { _business = business; }

この例外をスローするMVC:

このオブジェクトにはパラメーターなしのコンストラクターは定義されていません。

PS:参照されている古いdllを使用しているため、新しいバージョンのUnityを使用できません。そのため、unity.WebApiまたはunity.Mvc3dllを使用できません。

これを行う方法?

4

1 に答える 1

12

ASP.MVCに、コンテナーを使用してそれらを解決するように指示する必要があります。

次のようなコントローラファクトリを作成します

/// <summary>
/// Controller factory which uses an <see cref="IUnityContainer"/>.
/// </summary>
public class IocControllerFactory : DefaultControllerFactory
{
    private readonly IUnityContainer _container;

    public IocControllerFactory(IUnityContainer container)
    {
        _container = container;
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType != null)
            return _container.Resolve(controllerType) as IController;
        else
            return base.GetControllerInstance(requestContext, controllerType);
    }
}

そして、それをglobal.asaxのControllerBuilderを介して登録します

var factory = new IocControllerFactory(_container);
ControllerBuilder.Current.SetControllerFactory(factory);

フレームワークが新しいコントローラーを要求するたびに、コンテナーを使用するファクトリを使用するようになりました。

于 2013-02-01T16:04:32.180 に答える