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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將值傳遞給WCF服務(wù)的構(gòu)造函數(shù)?

如何將值傳遞給WCF服務(wù)的構(gòu)造函數(shù)?

如何將值傳遞給WCF服務(wù)的構(gòu)造函數(shù)?我希望將值傳遞給實(shí)現(xiàn)我的服務(wù)的類的構(gòu)造函數(shù)。但是Servicehost只允許我傳遞要創(chuàng)建的類型的名稱,而不是傳遞給其構(gòu)造函數(shù)的參數(shù)。我希望能夠傳遞一個創(chuàng)建我的服務(wù)對象的工廠。到目前為止,我發(fā)現(xiàn)的是:WCF依賴注入行為這比我想要的更多,而且似乎對我的需求過于復(fù)雜。
查看完整描述

3 回答

?
萬千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個贊

您需要實(shí)現(xiàn)自定義的組合ServiceHostFactoryServiceHostIInstanceProvider.

給定具有此構(gòu)造函數(shù)簽名的服務(wù):

public MyService(IDependency dep)

下面是一個可以將MyService拆分的示例:

public class MyServiceHostFactory : ServiceHostFactory{
    private readonly IDependency dep;

    public MyServiceHostFactory()
    {
        this.dep = new MyClass();
    }

    protected override ServiceHost CreateServiceHost(Type serviceType,
        Uri[] baseAddresses)
    {
        return new MyServiceHost(this.dep, serviceType, baseAddresses);
    }}public class MyServiceHost : ServiceHost{
    public MyServiceHost(IDependency dep, Type serviceType, params Uri[] baseAddresses)
        : base(serviceType, baseAddresses)
    {
        if (dep == null)
        {
            throw new ArgumentNullException("dep");
        }

        foreach (var cd in this.ImplementedContracts.Values)
        {
            cd.Behaviors.Add(new MyInstanceProvider(dep));
        }
    }}public class MyInstanceProvider : IInstanceProvider, IContractBehavior{
    private readonly IDependency dep;

    public MyInstanceProvider(IDependency dep)
    {
        if (dep == null)
        {
            throw new ArgumentNullException("dep");
        }

        this.dep = dep;
    }

    #region IInstanceProvider Members

    public object GetInstance(InstanceContext instanceContext, Message message)
    {
        return this.GetInstance(instanceContext);
    }

    public object GetInstance(InstanceContext instanceContext)
    {
        return new MyService(this.dep);
    }

    public void ReleaseInstance(InstanceContext instanceContext, object instance)
    {
        var disposable = instance as IDisposable;
        if (disposable != null)
        {
            disposable.Dispose();
        }
    }

    #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}

在MyService.svc文件中注冊MyServiceHostFactory,或者在代碼中直接使用MyServicehost進(jìn)行自我托管。

您可以很容易地推廣這種方法,事實(shí)上,一些DI容器已經(jīng)為您完成了這一工作(提示:Windsor的WCF設(shè)施)。


查看完整回答
反對 回復(fù) 2019-07-10
?
白衣染霜花

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

與使用自定義ServiceHostFactory不同,您還可以使用自定義屬性(例如MyInstanceProviderBehaviorAttribute)。從Attribute,使其實(shí)現(xiàn)IServiceBehavior并實(shí)現(xiàn)IServiceBehavior.ApplyDispatchBehavior方法類

// YourInstanceProvider implements IInstanceProvidervar instanceProvider = new YourInstanceProvider(<yourargs>);
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers){
    foreach (var epDispatcher in dispatcher.Endpoints)
    {
        // this registers your custom IInstanceProvider
        epDispatcher.DispatchRuntime.InstanceProvider = instanceProvider;
    }}

然后,將該屬性應(yīng)用于服務(wù)實(shí)現(xiàn)類。

[ServiceBehavior][MyInstanceProviderBehavior(<params as you want>)]public class MyService : IMyContract

第三種選擇:還可以使用配置文件應(yīng)用服務(wù)行為。


查看完整回答
反對 回復(fù) 2019-07-10
  • 3 回答
  • 0 關(guān)注
  • 748 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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