1

WCF アプリケーションでコンストラクター インジェクションを機能させようとしていますが、パラメーターとして [inject] を持つコンストラクターではなく、パラメーターのないコンストラクターを呼び出しています。Nuget経由でNinject WCFをインストールすると、依存関係がインストールされました。

ここに私のパッケージがあります:

<packages>
    <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
    <package id="Ninject" version="3.0.1.10" targetFramework="net40" />
    <package id="Ninject.Extensions.Wcf" version="3.0.0.5" targetFramework="net40" />
    <package id="Ninject.Web.Common" version="3.0.0.7" targetFramework="net40" />
    <package id="WebActivator" version="1.5.1" targetFramework="net40" />
</packages>

それは私のために NinjectWebCommon.cs クラスを作成し、それを App_Start に入れました。以下は、そのファイルからの私のカーネル バインディングです。注: 私はエンティティ フレームワーク pocos を使用しており、リポジトリをインスタンス化するにはコンテキストが必要です。

private static void RegisterServices(IKernel kernel)
{
    var camContext = new STCAMx0Entities();
    var iseaContext = new iseaEntities();

    kernel.Bind<IRepository<EnrgyProfl>>().To<EnrgyProflRepository>().InRequestScope().WithConstructorArgument("context", camContext);
    kernel.Bind<IRepository<GenUnitCost>>().To<GenUnitCostRepository>().InRequestScope().WithConstructorArgument("context", camContext);
    kernel.Bind<IRepository<LglGenUnit>>().To<LglGenUnitRepository>().InRequestScope().WithConstructorArgument("context", camContext);

    kernel.Bind<IRepository<dly_sch>>().To<DlySchRepository>().InRequestScope().WithConstructorArgument("context", iseaContext);
    kernel.Bind<IRepository<DealModel>>().To<WtDealRepository>().InRequestScope().WithConstructorArgument("context", iseaContext);
    kernel.Bind<IRepository<EnrgyProfl>>().To<WtEnergyProfileRepository>().InRequestScope().WithConstructorArgument("context", iseaContext);
}    

私のサービスでは、これをコンストラクターとして使用しています。

[Inject]
public CamService(IRepository<dly_sch> dlySchRepo, IRepository<dly_unit> dlyUnitRepo, IRepository<LglGenUnit> lglGenRepo, IRepository<EnrgyProfl> enrgyProflRepo, IRepository<DealModel> wtDealRepo)
{
    _dlySchRepo = dlySchRepo;
    _dlyUnitRepo = dlyUnitRepo;
    _lglGenRepo = lglGenRepo;
    _enrgyProflRepo = enrgyProflRepo;
    _wtDealRepo = wtDealRepo;
}

以下は、私のリポジトリの 1 つの例です。

public class DlySchRepository : IRepository<dly_sch>
{
    private static readonly CommonLogger Log = LogFactory.Singleton.Create(typeof (DlySchRepository));
    private iseaEntities _context = new iseaEntities();
    public DlySchRepository(iseaEntities context) { _context = context; }
    public DlySchRepository() { }
...

助けてください!!!!

ありがとうございました。

4

0 に答える 0