Unity Singleton Code
Je suis nouveau sur L'unité et suis en train d'écrire une certaine Unité logique qui initialise et s'inscrire/se résout en une instance du singleton de l'objet du Courriel, de sorte qu'il peut être utilisé dans plusieurs autres objets, un exemple ci-dessous OperationEntity.
Alors, quand il est enregistré, il remplit l'e-Mail singleton avec certaines valeurs à partir d'un fichier de config, puis chaque fois qu'une instance de OperationEntity est créé (dans mon cas, c'est désérialisé), il utilise ce même e-Mail singleton. De sorte que tous mes clients logique doit faire est de désérialiser OperationEntity et appel PerformAction() - avec l'e-mail de l'instance de prise en charge par l'Unité.
public interface IEmail
{
string FromName { get; set; }
string FromEmailAddress { get; set; }
}
public class Email : IEmail
{
public string FromName { get; set; }
public string FromEmailAddress { get; set; }
public Email(string fromName, string fromEmailAddress)
{
FromName = fromName;
FromEmailAddress = fromEmailAddress;
}
}
public class OperationEntity
{
private readonly IEmail _email;
public int OperationId { get; set; }
public string OperationName { get; set; }
public string ToAddress { get; set; }
public OperationEntity(IEmail email)
{
_email = email;
}
public void PerformAction()
{
_email.ToAddress = ToAddress;
_email.Body = "Some email body";
_email.Deliver();
}
}
Toute aide serait appréciée dans l'obtention de cette Unité code du travail
public static void Register(IUnityContainer container)
{
container
.RegisterType<IEmail, Email>(
new InjectionFactory(c => new Email(
"To Name",
"[email protected]")));
var email = container.Resolve<IEmail>();
container.RegisterType<OperationEntity>(
"email", new ContainerControlledLifetimeManager(),
new InjectionConstructor(email));
}
source d'informationauteur Bern
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous avez besoin d'un durée de vie de manager la
ContainerControlledLifetimeManager
est pour les singletons.Pour l'initialisation personnalisée, vous pourriez probablement utiliser
InjectionFactory
Cela vous permet d'écrire du code qui initialise l'entité.
Edit1: cela devrait aider à
et puis
Edit2: À l'appui de la sérialisation, vous devez reconstruire les dépendances d'après vous désérialisez:
et puis
Vous pouvez utiliser:
Si IEmail est un singleton sans dépendances (juste des arguments personnalisés), vous pouvez de nouveau vous-même:
Qui enregistre l'exemple fourni comme un singleton pour le conteneur.
Alors que vous venez de résoudre le service:
Et parce que vous êtes en train de résoudre un type de béton, il n'y a pas d'inscription nécessaire. Néanmoins, si vous souhaitez que le service aussi être un singleton, vous pouvez l'enregistrer à l'aide de ContainerControlledLifetimeManager et tous les appels à résoudre (ou lors de l'injection comme une dépendance à une autre classe) sera de retour le même exemple: