Şimdiye kadar hiç Unity kullanmamıştım, bu yüzden cevabım oldukça belirsiz.
Müdür basittir. Fabrikaları temsil eden bazı delegeleri tanımlarsınız. Ardından delegelerle eşleşen genel yöntemlere sahip bir "fabrika" sınıfı oluşturursunuz. Bu sınıf konteyneri bilir. Şimdi delegeyi kaydettirin ve bu sınıfı uygulama olarak ayarlayın. Daha sonra sadece delege enjekte edebilirsiniz. Enjekte edilen delege çağırdığınızda, kapsayıcıyı bilen ve yeni bir örnek için kapsayıcıdan soran fabrika sınıfı çağrılır.
Önce fabrika-delegelerinizi tanımlarsınız. Bu gibi temsilci kayıt neyi Şimdi
/// <summary>
/// Represents a <see cref="Provider{TArg,TServiceType}"/> which holds
/// the container context and resolves the service on the <see cref="Create"/>-call
/// </summary>
internal class GenericFactory{
private readonly IContainer container;
public ClosureActivator(IContainer container)
{
this.container= container;
}
/// <summary>
/// Represents <see cref="Provider{TServiceType}.Invoke"/>
/// </summary>
public TService Create()
{
return container.Resolve<TService>();
}
/// <summary>
/// Represents <see cref="Provider{TArg,TServiceType}.Invoke"/>
/// </summary>
public TService Create(TArg arg)
{
return container.Resolve<TService>(new[] {new TypedParameter(typeof (TArg),arg)});
}
}
şey:
public delegate TServiceType Provider<TServiceType>();
public delegate TServiceType Provider<TArg,TServiceType>(TArg argument);
bir jenerik fabrika oluşturmak
var newServiceCreater = new GenericFactory(container);
container.Register<Provider<MyCompoent>>().To(newServiceCreater.Create);
var newServiceCreater = new GenericFactory(container);
container
.Register<Provider<OtherServiceWithOneArgumentToConstruct>>()
.To(newServiceCreater.Create);
diğer bileşenler sadece 'Sağlayıcı Şimdi diğer enjekte 'konteyner yerine.
Bu işe başladım - çok teşekkürler! – GraemeF