एक तरीका है रेपोजिटरी फैक्टरी आईआरपीओएसटीओटी फैक्ट्री लागू करने के लिए, फिर उसे पंजीकृत करें। हल किए गए प्रकार एक कारखाना प्राप्त कर सकते हैं, फिर इसकी CreateAuthoringRepository विधि को कॉल करें। वांछित होने पर आप CreateAuthoringRepositoryForCurrentIdentity नामक एक ओवरलोड बना सकते हैं, या एकता के साथ कारखाने की द्वितीय निर्भरता पंजीकृत कर सकते हैं।
मैं शायद एक कारखाना इंजेक्ट करता हूं और CreateAuthoringRepository विधि को आपके पास छोड़ देता हूं, तो क्लाइंट WindowsIdentity.GetCurrent() को पास करते हैं। इस तरह पहचान हमेशा ताजा होती है, और आप परीक्षण के लिए कारखाने का नकल कर सकते हैं।
वैकल्पिक रूप से, आप InjectionFactory साथ एक प्रतिनिधि निर्दिष्ट कर सकते हैं:
void Main()
{
using (var container = new UnityContainer())
{
container.RegisterType<IAuthoringRepository>(
new InjectionFactory(c => CreateAuthoringRepository()));
Console.WriteLine("debug - resolving model");
var model = container.Resolve<Model>();
}
}
public IAuthoringRepository CreateAuthoringRepository()
{
Console.WriteLine("debug - calling factory");
return new AuthoringRepository
{ Identity = WindowsIdentity.GetCurrent() };
}
public class Model
{
public Model(IAuthoringRepository repository)
{
Console.WriteLine(
"Constructing model with repository identity of "
+ repository.Identity);
}
}
public interface IAuthoringRepository
{
IIdentity Identity { get; }
}
public class AuthoringRepository : IAuthoringRepository
{
public IIdentity Identity { get; set; }
}
यह प्रिंट:
debug - resolving model
debug - calling factory
Constructing model with repository identity of System.Security.Principal.WindowsIdentity
एकता 2.0 के लिए है यही कारण है कि। पिछले संस्करणों के साथ, StaticFactoryExtension देखें।
धन्यवाद! एक आकर्षण की तरह काम किया =) – burnt1ce
बिल्कुल सही! यह मेरे लिए भी काम करता है। –