什么时候在依赖注入中创建和分配对象的实例

时间:2012-11-25 18:20:58

标签: asp.net-mvc dependency-injection structuremap

假设我们在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/News

1 个答案:

答案 0 :(得分:1)

您应该让ASP .NET MVC知道您正在使用StructureMap进行依赖注入。

您可以通过提供IControllerFactory

来实现

在布线之前(在程序开始时)使用此代码 -

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

StructureMapControllerFactory将在实例化控制器时提供使用DI容器的实现

我从未使用StructureMap完成它,但我想有人已经为StructureMap实现了ContorllerFactory。