Ich bin im Autofac rum und habe Probleme bei der Bindung an einen bestimmten Konstruktor.AutoFac NamedParameter wird nicht richtig aufgelöst
Ich habe den folgenden Code:
var builder = new ContainerBuilder();
builder
.RegisterType<GenericIocFactory>()
.As<IGenericIocFactory>();
builder
.RegisterType<Product>()
.As<IProduct>()
.PropertiesAutowired();
IContainer Container = builder.Build();
IGenericIocFactory Fac = Container.Resolve<IGenericIocFactory>();
_product = Fac.Get<IProduct>(new Dictionary<string,object>() { {"returnEmpty" , false} }) as Product;
Dann in der Fabrik:
public interface IGenericIocFactory
{
T Get<T>(Dictionary<string,object> options) where T: class;
}
public class GenericIocFactory : IGenericIocFactory
{
private readonly IComponentContext _icoContext;
private object _options;
public GenericIocFactory(IComponentContext icoContext,bool isInjected = true)
{
_icoContext= icoContext;
}
public T Get<T>(Dictionary<string,object> options) where T: class
{
var _parameters = new List<Parameter>();
foreach (var parameter in options)
{
_parameters.Add(new NamedParameter(parameter.Key, parameter.Value));
}
return _icoContext.Resolve<T>(_parameters);
//operate on new object
// tried this as well
//return _icoContext.Resolve<T>(
//new NamedParameter("returnEmpty" , false)
//new TypedParameter(typeof(bool),false)
//);
}
}
Dies ein Produkt löst aber nicht mit dem Konstruktor i erwartet.
Ziel Konstruktor
public Product(bool returnEmpty)
Beheben Konstruktor
public Product(IList<string> productCodes, string fields = "", string orderBy = "ProductCode")
Es gibt insgesamt 23 Konstrukteure und das eine Lösung ist nicht das größte (so dass ich nicht denke, daß seine gierig)
dh
public Product(string strFields, string strFrom, string strFilter, string strOrderBy, string whseCode,
bool addExistsInWharehouse, string additionalAfterorderBy, bool forceUniqueRecords = false)
Noch ist es das erste oder letzte in oder der Definition.
Ich bin ratlos kann jemand sehen, was ich falsch mache.
Warum brauchen Sie DI für Objekte, die DTO zu sein scheint? Sehen Sie sich das an: http: // stackoverflow.com/questions/6297322/dependency-injection-use-with-data-transfer-objects-dtos oder http://programmers.stackexchange.com/questions/83091/use-dependency-injection-for-data-objects –
@CyrilDurand Leider ist dies eine Megaklasse des Schicksals (eine unter vielen) und kein DTO-Objekt. Ich werde versucht, so ioc-Struktur auch das Projekt zu implementieren, ohne alles auf einmal damit die Notwendigkeit zu tun, die Konstruktoren nicht zu vereinfachen, da die Objekte sowohl injizieren und nicht injizieren und immer noch funktionieren müssen. Ich bin so nah an einer Lösung, dass ich posten werde, was ich mit diesem arvo vorhabe. – Spaceman