1

ここに投稿するのはこれが初めてであり、私の質問への回答を高低で検索しましたが、ほとんど成功していません。

背景: 現在、Ninject を使用して IOC と DI を実行するために、既存の SOAP Web サービス (.Net 3.5) をリファクタリングしようとしています。Web メソッドで初期化しようとしている CacheManager がありますが、インジェクションが開始されていないようです。

以下のWebサービスを呼び出すコンソールアプリケーションがあります。

static void Main(string[] args)
    {
        TestService service = new CachingService.TestService();

        DataResult result = service.GetSomething(1);
    }

Web サービスは次のとおりです: TestService.asmx.cs

[WebMethod(Description = "Get something")]
public DataResult GetSomething(int param)
{
    try
    {
        return this.CacheManager.Get();
    }
    catch (Exception ex)
    {
        throw;
    }
}

Base.cs (TestService.asmx.cs は Base を継承して CacheManager を初期化します)

public class Base
{
    [Inject]
    public ICacheManager CacheManager
    {
        get
        {
            if (cacheProxy == null)
            {
                cacheProxy = new CacheProxy();
            }
            return cacheProxy.CacheManager;
        }
    }  
}

CacheProxy.cs

public class CacheProxy
{
    [Inject]
    public ICacheManager CacheManager { get; set; }
}

CacheManager.cs

public class CacheManager : ICacheManager
{
   //implements iCacheManager methods
}

App_Start/NinjectWebCommon.cs

private static void RegisterServices(IKernel kernel)
    {
kernel.Bind<ICacheManager>()
            .ToMethod(x => x.Kernel.Get<ICacheManagerFactoryBuilder>().GetCacheManagerFactory().CreateCacheManager())
            .InRequestScope();
}

CacheManagerFactoryBuilder.cs

public class CacheManagerFactoryBuilder : ICacheManagerFactoryBuilder
{
    private ICacheManagerFactory _Factory;

    public CacheManagerFactoryBuilder(ICacheManagerFactory factory)
    {
        _Factory = factory;
    }

    public ICacheManagerFactory GetCacheManagerFactory()
    {
        return _Factory;
    }
}

CacheManagerFactory.cs

public class CacheManagerFactory : ICacheManagerFactory
{
    private readonly ICacheManager Manager;

    public CacheManagerFactory(ICacheManager manager)
    {
        if (this.Manager == null)
        {
            this.Manager = manager;
        }
    }

    public ICacheManager CreateCacheManager()
    {
        return this.Manager;
    }

}  

コンソール アプリケーションを実行してGetSomethingにヒットするたびに、CacheManagerが null になります。Web メソッドを呼び出したときにインジェクションが行われないのはなぜですか?

4

1 に答える 1

0

チームの別のメンバーは、最終的に別のスレッドでこれに出くわしました。

asp.net WebフォームにNinjectまたはDIを実装するにはどうすればよいですか?

欠けていたのは、TestService Web サービス クラスで WebServiceBase を継承することだけでした。

于 2012-11-08T10:24:53.537 に答える