我做了这样的配置:
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中连接起来的,所以这种情况并不明显。
答案 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(....);
}