Я довольно привык использовать IoC для структурной карты с MVC, но недавно мне пришлось адаптировать его к устаревшим веб-формам.
Я сделал это, предоставив класс 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 = нейтральный,PublicKeyToken = null
Не совсем уверен, почему это изменится, когда я разверну свое приложение, особенно еслиЯ просто копирую и вставляю файлы.
Редактировать Я звоню IoCContainer.Configure () в Application_Start () в Global.asaxтакие как следующее:
protected void Application_Start(object sender, EventArgs e)
{
log.Debug("In Application Start - Pre BuildUp");
/*Configure Ioc Container*/
IocConfigurator.Configure();
}