我是新来的Unity http://unity.codeplex.com/我正在尝试编写一些 Unity 逻辑来初始化和注册/解析 Email 对象的单例实例,以便它可以在多个其他对象中使用,下面的一个示例是 OperationEntity。
因此,当它注册时,它会使用配置文件中的一些值填充电子邮件单例,然后每当创建 OperationEntity 的实例(在我的例子中它正在被反序列化)时,它都会使用相同的电子邮件单例。因此,我的所有客户端逻辑需要做的就是反序列化 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",
"[email protected] /cdn-cgi/l/email-protection")));
var email = container.Resolve<IEmail>();
container.RegisterType<OperationEntity>(
"email", new ContainerControlledLifetimeManager(),
new InjectionConstructor(email));
}
首先,你需要一个合适的终身经理 http://msdn.microsoft.com/en-us/library/ff647854.aspx the ContainerControlledLifetimeManager
是针对单身人士的。
对于自定义初始化,您可能可以使用InjectionFactory http://bartwullems.blogspot.com/2011/03/unity-injectionfactory.html
这使您可以编写初始化实体的任何代码。
编辑1:这应该有帮助
public static void Register(IUnityContainer container)
{
container
.RegisterType<IEmail, Email>(
new ContainerControlledLifetimeManager(),
new InjectionFactory(c => new Email(
"To Name",
"[email protected] /cdn-cgi/l/email-protection")));
}
and then
var opEntity = container.Resolve<OperationEntity>();
Edit2:为了支持序列化,您必须在反序列化后重建依赖项:
public class OperationEntity
{
// make it public and mark as dependency
[Dependency]
public IEmail _email { get; set;}
}
and then
OperationEntity entity = somehowdeserializeit;
// let unity rebuild your dependencies
container.BuildUp( entity );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)