gpt4 book ai didi

c# - Unity单例代码

转载 作者:IT王子 更新时间:2023-10-29 04:22:53 26 4
gpt4 key购买 nike

我是 Unity 的新手并且正在尝试编写一些 Unity 逻辑来初始化和注册/解析电子邮件对象的单例实例,以便它可以跨多个其他对象使用,下面的一个示例是 OperationEntity。

因此,当它注册时,它会使用配置文件中的一些值填充 Email 单例,然后每当创建 OperationEntity 的实例(在我的例子中它正在反序列化)时,它都会使用相同的 Email 单例。因此,我所有的客户端逻辑需要做的就是反序列化 OperationEntity 并调用 PerformAction() - 电子邮件实例由 Unity 处理。

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();
}
}

任何有助于使此 Unity 代码正常工作的帮助都将不胜感激

    public static void Register(IUnityContainer container)
{
container
.RegisterType<IEmail, Email>(
new InjectionFactory(c => new Email(
"To Name",
"to@email.com")));

var email = container.Resolve<IEmail>();

container.RegisterType<OperationEntity>(
"email", new ContainerControlledLifetimeManager(),
new InjectionConstructor(email));
}

最佳答案

首先,您需要一个合适的 lifetime manager 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 );

关于c# - Unity单例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com