Я хотел бы добавить одну вещь к отличному ответу chazomaticus :
Не забудьте также тег META (например, или HTML4 или XHTML-версия этого файла ):
Это кажется тривиальным, но IE7 дал мне проблемы с этим раньше.
Я делал все правильно; база данных, соединение с базой данных и HTTP-заголовок Content-Type были настроены на UTF-8, и она отлично работала во всех других браузерах, но Internet Explorer по-прежнему настаивал на использовании «западноевропейской» кодировки.
It оказалось, что на странице отсутствует метка META. Добавление этого решения проблемы.
Правка:
У W3C фактически есть довольно большой раздел , посвященный I18N . У них есть ряд статей, связанных с этой проблемой & ndash; описывая HTTP, (X) HTML и CSS сторону вещей:
Они рекомендуют использовать как HTTP-заголовок, так и HTML метатег (или объявление XML в случае XHTML служил XML).
Во-первых, вам нужен правильный менеджер времени жизни , для ContainerControlledLifetimeManager
для синглетонов.
Для пользовательской инициализации вы, вероятно, можете использовать InjectionFactory
Это позволяет вам писать любой код, который инициализирует объект.
Edit1: это должно помочь
public static void Register(IUnityContainer container)
{
container
.RegisterType<IEmail, Email>(
new ContainerControlledLifetimeManager(),
new InjectionFactory(c => new Email(
"To Name",
"to@email.com")));
}
, а затем
var opEntity = container.Resolve<OperationEntity>();
Edit2: для поддержки сериализации вам придется перестроить зависимости после десериализации:
public class OperationEntity
{
// make it public and mark as dependency
[Dependency]
public IEmail _email { get; set;}
}
, а затем
OperationEntity entity = somehowdeserializeit;
// let unity rebuild your dependencies
container.BuildUp( entity );
Вы можете использовать:
container.RegisterType<IEmail, Email>(new ContainerControlledLifetimeManager());
Если IEmail является одноэлементным, без зависимостей (только пользовательские аргументы), вы можете его обновить самостоятельно:
container.RegisterInstance<IEmail>(new Email("To Name", "to@email.com"));
Это зарегистрирует экземпляр, предоставленный в качестве одиночного элемента для контейнера.
Затем вы просто разрешаете службу:
container.Resolve<OperationEntity>();
И поскольку вы разрешаете конкретный тип, регистрация не требуется. Тем не менее, если вы хотите, чтобы эта служба также была одиночной, вы можете зарегистрировать ее с помощью ContainerControlledLifetimeManager, а затем все вызовы для решения (или при вводе ее как зависимости другому классу) вернут один и тот же экземпляр:
container.RegisterType<OperationEntity>(new ContainerControlledLifetimeManager());