Tôi mới dùng Unity và đang cố gắng viết một số logic Unity khởi tạo và đăng ký/giải quyết một thể hiện đơn lẻ của đối tượng Email để nó có thể được sử dụng trên nhiều đối tượng khác, một ví dụ bên dưới là OperationEntity. Vì vậy, khi nó được đăng ký nó populates các singleton email với một số giá trị từ một tập tin cấu hình, sau đó bất cứ khi nào một thể hiện của OperationEntity được tạo ra (trong trường hợp của tôi nó được deserialized) nó sử dụng cùng một singleton email. Vì vậy, tất cả logic khách hàng của tôi cần làm là deserialize OperationEntity và gọi PerformAction() - với trường hợp email được Unity xử lý.Unity Singleton Code
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();
}
}
Bất kỳ trợ giúp sẽ được đánh giá cao trong việc đang Unity này để làm việc
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));
}
Tôi đã tìm kiếm một số trợ giúp với mã C# Unity cần thiết để dây này lên. – Bern
Có thể [wiki về Singleton] (http://wiki.unity3d.com/index.php/Singleton) có thể có một số trợ giúp. – cregox
@cregox Đó là một liên kết đến Unity3d, một thư viện đồ họa. Đây là câu hỏi về [Unity container] (https://msdn.microsoft.com/en-us/library/ff647202.aspx), một khung DI. – Andy