我很习惯将结构图IoC与MVC结合使用,但最近不得不将其应用于传统的Web表单。
我通过提供 IoCContainer 类来完成此操作,该类具有 Configure()方法,例如以下处理注册表的方法。
public static void Configure()
{
var log = LogManager.GetLogger(typeof (Global1));
log.Debug("Initializing Container");
/*Initialize IoC Container*/
ObjectFactory.Initialize(x =>
{
x.For<ITokenService>().Use<TokenService>();
x.For<ILocalizationService>().Use<LocalizationService>();
log.Debug("Initializing Object Factory");
/*Setup Property Injection*/
x.SetAllProperties(p =>
{
p.OfType<ITokenService>();
p.OfType<ILocalizationService>();
});
});
}
我提供了一个包含 BuildUp()方法BasePage.cs的基本控件,如下所示。
public BasePage()
{
var log = LogManager.GetLogger(typeof (Global1));
log.Debug("Base Page Build Up");
/*Inject Dependencies*/
ObjectFactory.BuildUp(this);
}
在我的一个类中,我使用自动装配将LocalizationService注入ILocalization属性。
我的本地计算机上的一切都运行得很好,但出于某种原因,当我将此代码部署到我们的登台服务器时,它给了我以下的StructureMap异常:
StructureMap异常代码:202 没有为PluginFamily定义的默认实例SuperShuttle.Web.Applications.Reservations.Interfaces.Services.ILocalizationService,SuperShuttle.Web.Applications.Reservations,Version = 3.6.27.0,Culture = neutral,PublicKeyToken = null
我不太确定在部署应用程序时它会发生什么变化,特别是因为我只是在复制和粘贴文件。
修改我在Global.asax的 Application_Start()中调用 IoCContainer.Configure(),如下所示:
protected void Application_Start(object sender, EventArgs e)
{
log.Debug("In Application Start - Pre BuildUp");
/*Configure Ioc Container*/
IocConfigurator.Configure();
}