1

次のように、MVC にコントローラーがあるとします。

public class HomeController : Controller
{
        IProductService _productService;
        ICategoryService _categoryService;
        IUnitOfWork _uow;
        public HomeController(IUnitOfWork uow, IProductService productService, ICategoryService categoryService)
        {
            _productService = productService;
            _categoryService = categoryService;
            _uow = uow;
        }

        // ...
}

依存性注入に StructureMap を使用し、Global..asax.cs には次のようなコードがあります。

...           
 ObjectFactory.Initialize(x =>
            {
                x.For<IUnitOfWork>().HttpContextScoped().Use(() => new EFCodeFirstContext());
                x.ForRequestedType<ICategoryService>().TheDefaultIsConcreteType<EfCategoryService>();
                x.ForRequestedType<IProductService>().TheDefaultIsConcreteType<EfProductService>();
            });
...

今私の質問は:

たとえば、EfCategoryService のインスタンスが作成され、_categoryService に割り当てられるのは何時ですか?

1- このコントローラーの任意のメソッドで _categoryService を使用するときはいつですか?

また

2-このコントローラへのリクエストが送信された直後? 例えば、

www.sitename.com/Home

また

www.sitename.com/Home/ニュース

4

1 に答える 1

1

依存関係の挿入に StructureMap を使用していることを ASP .NET MVC に知らせる必要があります。

を提供することでそれを行うことができますIControllerFactory

ルーティングを配線する前に (プログラムの最初に)、次のコードを使用します。

ControllerBuilder.Current.SetControllerFactory(new StractureMapControllerFactory());

StructureMapControllerFactoryコントローラーをインスタンス化するときに DI コンテナーを使用するための実装を提供する場所

私は StructureMap でそれを行ったことはありませんが、誰かがすでに StructureMap の ContorllerFactory を実装していると思います。

于 2012-11-25T19:09:56.280 に答える