簡體   English   中英

WCF:將參數傳遞給ServiceHost

[英]WCF : Passing parameter to ServiceHost

嗨,我正在使用Framework 4.0,Ioc Microsoft Practice Unity在主程序中,我在創建服務時加載了所有服務,我有兩個參數

(IUnitOfWork unitOfWork,IRepository<Persona> personaRepository) 

在這種情況下。

在主程序中,如何在創建時將這兩個參數傳遞給ServiceHost

ServiceHost host = new ServiceHost(service)?

服務:

public class RegService : IRegService
{
    private IUnitOfWork unitOfWork;
    private IRepository<Persona> personaRepository;

    public RegService(IUnitOfWork unitOfWork,IRepository<Persona> personaRepository){
        this.unitOfWork = unitOfWork;
        this.personaRepository = personaRepository;
    }

    public IEnumerable<Persona> ListaPersonas(){
        return personaRepository.GetAll();
    }

    public int PersonaInsert(Persona oPersona){
        personaRepository.Add(oPersona);
        return oPersona.IdPersona;
    } 
}

主要:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Starting services...");
        Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ServiceModelSectionGroup serviceModel = ServiceModelSectionGroup.GetSectionGroup(appConfig);
        ServiceElementCollection serviceSection = serviceModel.Services.Services;
        foreach (ServiceElement objService in serviceModel.Services.Services){
            Type service = Type.GetType(objService.Name + ", Mistic.Contador.Services.Implementation");
            {
                ServiceHost host = new ServiceHost(service);
                host.Open();             
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Service started: " + objService.Endpoints[0].Contract);
            }
        }
        Console.ForegroundColor = ConsoleColor.Gray;
        Console.WriteLine("Services are ready... Press enter to close the services.");
        Console.ReadLine();
    }
}

當我在此行中執行host.Open()時,出現以下消息:

提供的服務類型沒有默認的(無參數)構造函數,因此無法作為服務加載。 要解決此問題,請向類型添加默認構造函數,或將類型的實例傳遞給主機。

更新引導程序(統一)

public static class Bootstrapper{
public static IUnityContainer Initialise(){
  var container = BuildUnityContainer();
  DependencyResolver.SetResolver(new UnityDependencyResolver(container));
  return container;
}

private static IUnityContainer BuildUnityContainer()
{
    var container = new UnityContainer();
    string connectionString = "ModelMovieSolContainer";container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager(), new InjectionConstructor(connectionString));
    container.RegisterType(typeof(IGenericRepository<>), typeof(GenericRepository<>));
    container.BindInRequestScope<IMovieService, MovieService>();
    return container;
}

}

您可以創建自己的ServiceHost實現,以提供將依賴項注入服務的能力,但是我建議為此使用現有容器。

例如,Ninject具有強大的WCF支持,並且易於使用。 內置的NinjectServiceHostFactory可以創建自己的ServiceHost,因此您無需手動創建。 您所要做的就是向NinjectServiceHostFactory.SetKernel()(當然還有相關性)注冊一個內核。

我通常從NijectServiceHostFactory創建派生類型,並在模塊的構造函數中注冊內核,但是在自托管應用程序中,您可以使用其他方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM