Пытаюсь добавить поддержку IoC в мои службы WCF

Я пытаюсь добавить поддержку IoC в свою службу REST WCF (Windows Server 2008 ). Я новичок в этом и следую инструкциям, приведенным в следующем видео:

http://www.dimecasts.net/Content/WatchEpisode/150

В видео рассматривается ряд классов, которые помогают мне получить StructureMap ' ■ IoC запущен и работает, открывая доступ к конечным точкам WCF. Я разместил весь код в конце этого сообщения.

Когда я запускаю свой код, пользовательский класс StructureMapServiceHost выдает ошибку @ метод StructureMapServiceHost (Type serviceType, params Uri [] baseAddress):

   public class StructureMapServiceHost : ServiceHost
{
    public StructureMapServiceHost() {}

    public StructureMapServiceHost(Type serviceType, params Uri[] baseAddress)
        : base(serviceType, baseAddress)
    {

    }

    protected override void OnOpening()
    {
        Description.Behaviors.Add( new IoCServiceBehavior());
        base.OnOpening();
    }
}

Я сообщается, что:

Указанный тип службы не может быть загружен как служба, поскольку у него нет конструктора по умолчанию (без параметров). Чтобы решить эту проблему, добавьте к типу конструктор по умолчанию или передайте экземпляр типа хосту.

Это правда, это не так. Но и в видео-примере его не было. Ниже мой сервис:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
    public class UserService : IUserService
    {
        public UserService(IUserRepository specification)
        {
            Specification = specification;
        }

        public List GetAllUsers()
        {
            return Specification.GetAllUsers();
        }

        public User GetUser(string userId)
        {
            return Specification.GetUserById(new Guid(userId));
        }

        private List SearchForUsers(string searchString)
        {
            return Specification.SearchUsers(searchString);
        }

        public IUserRepository Specification { get; set; }

    }



public class IoCServiceBehavior : IServiceBehavior
    {
        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {   
        }

        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, 
            Collection endpoints, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
            foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
            {
                new StructureMapInstanceProvider(serviceDescription.ServiceType);
            }
        }
    }


public class StructureMapInstanceProvider : IInstanceProvider
{
    private readonly Type _serviceType;

    public StructureMapInstanceProvider(Type serviceType)
    {
        _serviceType = serviceType;
    }

    public object GetInstance(InstanceContext instanceContext)
    {
        return GetInstance(instanceContext, null);
    }

    public object GetInstance(InstanceContext instanceContext, Message message)
    {
        var instance = ObjectFactory.GetInstance(_serviceType);

        return instance;
    }

    public void ReleaseInstance(InstanceContext instanceContext, object instance)
    {
        throw new NotImplementedException();
    }
}




public class StructureMapServiceHostFactory : ServiceHostFactory
    {
        public StructureMapServiceHostFactory()
        {
            IoCBootstrap.SetupIoc();
        }

        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            return new StructureMapServiceHost(serviceType, baseAddresses);
        }
    }

Есть идеи? Спасибо.

ИЗМЕНИТЬ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ****

От StructureMapServiceHost Я удалил:

public StructureMapServiceHost(Type serviceType, params Uri[] baseAddress)
            : base(serviceType, baseAddress) { }

И добавил:

public StructureMapServiceHost(Object singletonInstance, params Uri[] baseAddress)
            : base( singletonInstance, baseAddress) { }

А затем удалил параметр из моего конструктора UserService. Я не получаю сообщение об ошибке:

HTML-документ не содержит Web информация об обнаружении службы.

5
задан Fyodor Soikin 19 January 2011 в 19:58
поделиться