Một cách là có RepositoryFactory triển khai IRepositoryFactory, sau đó đăng ký. Các loại được giải quyết có thể nhận được một nhà máy, sau đó gọi phương thức CreateAuthoringRepository của nó. Bạn có thể tạo một tình trạng quá tải được gọi là CreateAuthoringRepositoryForCurrentIdentity nếu muốn, hoặc đăng ký một phụ thuộc IIdentity của nhà máy với Unity.
Tôi có thể chỉ cần tiêm một nhà máy và rời khỏi phương thức CreateAuthoringRepository khi bạn có nó, sau đó có các máy khách vượt qua WindowsIdentity.GetCurrent(). Bằng cách đó, danh tính luôn tươi mới và bạn có thể thử nghiệm nhà máy để thử nghiệm.
Cách khác, bạn có thể chỉ định một đại biểu với 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; }
}
in này:
debug - resolving model
debug - calling factory
Constructing model with repository identity of System.Security.Principal.WindowsIdentity
Đó là cho Unity 2.0. Với các phiên bản cũ hơn, hãy xem StaticFactoryExtension.
Cảm ơn! làm việc như một say mê =) – burnt1ce
Hoàn hảo! Điều này cũng phù hợp với tôi. –