Привет Я работаю с Framework 4.0, Ioc Microsoft Practice Unity В основной программе я загружаю все услуги при создании службы у меня есть два параметраWCF: Передача параметра в ServiceHost
(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() У меня есть это сообщение:
тип службы не может быть загружен как служба, поскольку он не имеет значения по умолчанию (параметр er-less). Чтобы устранить проблему, добавьте конструктор по умолчанию к типу или передайте экземпляр типа на хост.
Update Bootstrap (Единство)
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' не имеет конструктора для принятия ваших параметров ... –
@marc_s вы можете предложить мне некоторое решение для решения этой проблемы? Если я не могу использовать ServiceHost – raranibar
Вы упомянули о единстве Microsoft в своем решении, однако я не вижу, где вы его используете. Вы должны использовать специальный InstanceProvider (свой собственный или использовать любой из доступных самородков там), чтобы это работало. – Roman