StructureMap,使用container或objectfactory配置?

时间:2011-09-15 16:37:51

标签: c# structuremap

我做了这样的配置:

var container = new Container(x =>
                                              {
                                                  x.For<IEngine>().Use<V6Engine>();
                                                  x.For<ICar>().Use<HondaCar>();
                                              }
);

然后在我的mvc控制器动作中我做了:

ICar car = ObjectFactory.GetInstance<ICar>();

我应该以某种方式使用Container或ObjectFactory设置我的容器吗?它没有解决,所以我在c#控制台应用程序中测试了一些东西,如果我这样做了,它就可以了:

ICar car = container.GetInstance<ICar>();

但是这只有在容器处于本地范围内时才有效,而在Web应用程序中,由于事情是在global.asax.cs中连接起来的,所以这种情况并不明显。

2 个答案:

答案 0 :(得分:3)

ObjectFactory是容器实例的静态网关。如果您只想要一个容器实例,并希望使用简单的静态方法来获取它,请使用ObjectFactory。您必须初始化ObjectFactory,然后通过ObjectFactory检索您的实例。

或者,如果您想自己管理容器的生命周期,可以创建一个Container实例,将初始化表达式传递给构造函数。然后,您从声明为存储Container的变量中检索实例。

在您的示例中,您将混合使用两种方法,但这些方法不起作用。

答案 1 :(得分:0)

我的配置如下

<强>的global.asax

  ObjectFactory.Initialize(action =>
            {
                action.For<ISomething>().Use<Something>;
            });

然后到处都是。

 ObjectFactory.GetInstance<ISomething>();

这可能不是唯一的方法。此外,我认为您可能正在寻找的是

Scan(scanner =>
        {
            scanner.AssemblyContainingType(....);
            scanner.AddAllTypesOf(....);
        }