第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將數(shù)據(jù)注入WCF服務(wù)

將數(shù)據(jù)注入WCF服務(wù)

我有如Miguel Castro建議的那樣構(gòu)造的WCF服務(wù)。這意味著我已經(jīng)手動(dòng)設(shè)置了所有內(nèi)容,并擁有一個(gè)使用ServiceHost對(duì)象托管我的服務(wù)的控制臺(tái)應(yīng)用程序。我想讓我的服務(wù)類保持精簡(jiǎn),并且它們當(dāng)前只是傳遞對(duì)行為類的調(diào)用。我現(xiàn)在的問(wèn)題是對(duì)服務(wù)類進(jìn)行單元測(cè)試。我想向類中注入一些東西作為構(gòu)造函數(shù)參數(shù),這樣我就可以模擬掉它并編寫(xiě)適當(dāng)?shù)母綦x單元測(cè)試。ServiceHost類似乎不接受參數(shù),所以我的問(wèn)題是如何將數(shù)據(jù)注入服務(wù)類中?
查看完整描述

3 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

WCF支持構(gòu)造函數(shù)注入,但是您必須跳過(guò)幾個(gè)步驟才能到達(dá)那里。關(guān)鍵在于編寫(xiě)自定義ServiceHostFactory。盡管它也必須具有默認(rèn)構(gòu)造函數(shù),但是您可以使用它構(gòu)造所有正確的行為。


作為示例,我最近寫(xiě)了一篇使用Castle Windsor來(lái)為服務(wù)實(shí)現(xiàn)連接依賴關(guān)系的示例。CreateServiceHost的實(shí)現(xiàn)只是這樣做:


return new WindsorServiceHost(this.container, serviceType, baseAddresses);

this.container配置的IWindsorContainer 在哪里。


WindsorServiceHost看起來(lái)像這樣:


public class WindsorServiceHost : ServiceHost

{

    public WindsorServiceHost(IWindsorContainer container, Type serviceType, params Uri[] baseAddresses)

        : base(serviceType, baseAddresses)

    {

        if (container == null)

        {

            throw new ArgumentNullException("container");

        }


        foreach (var cd in this.ImplementedContracts.Values)

        {

            cd.Behaviors.Add(new WindsorInstanceProvider(container));

        }

    }

}

和WindsorInstanceProvider看起來(lái)像這樣:


public class WindsorInstanceProvider : IInstanceProvider, IContractBehavior

{

    private readonly IWindsorContainer container;


    public WindsorInstanceProvider(IWindsorContainer container)

    {

        if (container == null)

        {

            throw new ArgumentNullException("container");

        }


        this.container = container;

    }


    #region IInstanceProvider Members


    public object GetInstance(InstanceContext instanceContext, Message message)

    {

        return this.GetInstance(instanceContext);

    }


    public object GetInstance(InstanceContext instanceContext)

    {

        var serviceType = instanceContext.Host.Description.ServiceType;

        return this.container.Resolve(serviceType);

    }


    public void ReleaseInstance(InstanceContext instanceContext, object instance)

    {

        this.container.Release(instance);

    }


    #endregion


    #region IContractBehavior Members


    public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)

    {

    }


    public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)

    {

    }


    public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)

    {

        dispatchRuntime.InstanceProvider = this;

    }


    public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)

    {

    }


    #endregion

}

這看起來(lái)可能很多,但是請(qǐng)注意,它是可重用的通用代碼,其循環(huán)復(fù)雜度較低。


您可以遵循相同的編碼習(xí)慣,使用另一個(gè)DI容器或使用窮人的DI來(lái)實(shí)現(xiàn)依賴注入。


查看完整回答
反對(duì) 回復(fù) 2019-12-27
?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊

如果您使用的是Castle Windsor,它具有出色的WCF集成功能,可以讓您輕松地做到這一點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2019-12-27
?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

您是否將服務(wù)配置為Singleton?我發(fā)現(xiàn)使用DI容器創(chuàng)建服務(wù)實(shí)例時(shí),IInstanceProvider實(shí)現(xiàn)可能會(huì)出現(xiàn)問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2019-12-27
  • 3 回答
  • 0 關(guān)注
  • 657 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)