出力をpdfとして出力するカスタムフォーマッタを1つ作成しました。次のスレッドで詳細を参照してください:それは答えあたりとして正常に動作している複数のクラスを持つカスタムフォーマッタへの依存性注入
Dependency Injection to CustomFormatter
。しかし、今私は以下のような2つのレポートを持っています。
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;
}
}
ここで依存性注入でどのように指定できますか。コンテキストバインディングについて読んだところ、問題が解決したと思います。
私はちょうど以下のような注射を追加しました。 WEBAPIの設定で
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();
、
var formatter = (PdfMediaTypeFormatter)config.DependencyResolver.GetService(typeof(PdfMediaTypeFormatter));
config.Formatters.Add(formatter);
実行すると、私はいつもフォーマッタにnullを得ました。私はninject.extensions.factory使用
:私はエラーに
アップデートを見つけるのに役立つしてください。私は以下のようにコードを変更しました。
public interface IPdfFactory
{
IReport GetPurchaseReport();
IReport GetBillReport();
}
public interface IReport
{
Task<MemoryStream> Create(object model);
}
私のBillReportとPurchaseReportはIReportインターフェイスを実装しています。また、PdfmapperクラスはIReportインターフェイスのみを持っています
以下のようなninject構成コード。コンフィグで
kernel.Bind<IReport>().To<PurchaseReport>().Named("PurchaseReport");
kernel.Bind<IReport>().To<BillReport>().Named("BillReport");
kernel.Bind<IPdfFactory>().ToFactory();
kernel.Bind<PdfMediaTypeFormatter>().ToSelf();
、再びエリアを追加するカスタムフォーマッタ私はヌル
var formatter = (PdfMediaTypeFormatter)config.DependencyResolver.GetService(typeof(PdfMediaTypeFormatter));
config.Formatters.Add(formatter);
新しいアップデートとしてフォーマッタを得た:
マイninject設定:
kernel.Bind<IReport>().To<PurchaseReport>().InRequestScope();
kernel.Bind<IReport>().To<BillReport>().InRequestScope();
kernel.Bind<IPdfFactory>().To<PdfFactory>().InRequestScope();
kernel.Bind<PdfMediaTypeFormatter>().ToSelf();
webapi設定:
var formatter = (PdfMediaTypeFormatter)config.DependencyResolver.GetService(typeof(PdfMediaTypeFormatter));
config.Formatters.Add(formatter);
また、フォーマッタはnullです。何か逃した?
を参照
は自分の古い質問にリンクに頼ることなく、この[、最小限の完全かつ検証例](https://stackoverflow.com/help/mcve])してください。 – BatteryBackupUnit
また、https://meta.stackexchange.com/questions/141823/why-is-cross-posting-wrong-on-an-external-site – BatteryBackupUnit
通知ありがとうございました – Akhil