J'ai créé un formateur personnalisé pour donner une sortie en format pdf. S'il vous plaît se référer plus de détails dans le fil suivant:Injection de dépendances vers un formateur personnalisé avec plusieurs classes
Dependency Injection to CustomFormatter
Il fonctionne bien selon la réponse. Mais maintenant j'ai 2 rapports comme ci-dessous;
public interface IPdfFactory {
MemoryStream Create(object model);
}
public class BillReport: IPdfFactory {
private readonly IBusinessLogic _logic;
public PdfFactory(IBusinessLogic logic) {
this._logic = logic;
}
public MemoryStream Create(object model) {
var stream = new MemoryStream();
//...Pdf generation code
//call data update
_logic.update(model);
return stream;
}
}
public class PurchaseReport: IPdfFactory {
private readonly IBusinessLogic _logic;
public PdfFactory(IBusinessLogic logic) {
this._logic = logic;
}
public MemoryStream Create(object model) {
var stream = new MemoryStream();
//...Pdf generation code
//call data update
_logic.update(model);
return stream;
}
}
Ici, comment puis-je spécifier dans l'injection de dépendance. J'ai lu sur la liaison de contexte et il pense que cela a résolu le problème.
J'ai juste ajouté l'injection comme ci-dessous;
kernel.Bind<IPdfFactory>().To<BillReport>().When(request => request.Target.Member.Name.StartsWith("Bill"));
kernel.Bind<IPdfFactory>().To<PurchaseReport>().When(request => request.Target.Member.Name.StartsWith("Purchase"));
kernel.Bind<PdfMediaTypeFormatter>().ToSelf();
Dans la configuration WebAPI,
var formatter = (PdfMediaTypeFormatter)config.DependencyResolver.GetService(typeof(PdfMediaTypeFormatter));
config.Formatters.Add(formatter);
Lors de l'exécution, je suis toujours nulle dans formatter. S'il vous plaît aidez-moi à trouver l'erreur
Mise à jour:
J'utilisé ninject.extensions.factory. J'ai changé mon code comme ci-dessous;
public interface IPdfFactory
{
IReport GetPurchaseReport();
IReport GetBillReport();
}
public interface IReport
{
Task<MemoryStream> Create(object model);
}
Maintenant, mon BillReport et PurchaseReport implémente l'interface IReport. La classe Pdfmapper possède également l'interface IReport uniquement.
Le code de configuration de ninject comme ci-dessous;
kernel.Bind<IReport>().To<PurchaseReport>().Named("PurchaseReport");
kernel.Bind<IReport>().To<BillReport>().Named("BillReport");
kernel.Bind<IPdfFactory>().ToFactory();
kernel.Bind<PdfMediaTypeFormatter>().ToSelf();
Dans la configuration, formatter personnalisé zone en ajoutant à nouveau i se formatter comme nulle
var formatter = (PdfMediaTypeFormatter)config.DependencyResolver.GetService(typeof(PdfMediaTypeFormatter));
config.Formatters.Add(formatter);
Nouvelle mise à jour:
Ma configuration ninject:
kernel.Bind<IReport>().To<PurchaseReport>().InRequestScope();
kernel.Bind<IReport>().To<BillReport>().InRequestScope();
kernel.Bind<IPdfFactory>().To<PdfFactory>().InRequestScope();
kernel.Bind<PdfMediaTypeFormatter>().ToSelf();
Dans webapi config:
var formatter = (PdfMediaTypeFormatter)config.DependencyResolver.GetService(typeof(PdfMediaTypeFormatter));
config.Formatters.Add(formatter);
maintenant aussi formatter est null. quelque chose a manqué?
S'il vous plaît font un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve]) sans compter uniquement sur un lien vers votre ancienne question. – BatteryBackupUnit
Aussi s'il vous plaît voir https://meta.stackexchange.com/questions/141823/why-is-cross-posting-wrong-on-an-external-site – BatteryBackupUnit
bien sûr pour la notification – Akhil