Исключение StructureMap 202 Экземпляр по умолчанию не определен (Версия 2.61) - PullRequest
0 голосов
/ 04 февраля 2011

Инициализация контейнера:

public override void Initialize()
        {

            ObjectFactory.Initialize(x =>
                                         {
                                             x.Scan(s =>
                                                        {
                                                            s.TheCallingAssembly();
                                                            s.AssemblyContainingType<IRegistar>();
                                                            s.WithDefaultConventions();

                                                        });

                                         });

        }

Global.asax.xc

  var dependencyContainer = new DependencyContainer();
            dependencyContainer.Initialize();

            ControllerBuilder.Current.SetControllerFactory(new DependencyControllerFactory());

Экземпляр Get:

public class DependencyControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
            {
                return base.GetControllerInstance(requestContext, controllerType);
            }

            try
            {
                return ObjectFactory.GetInstance(controllerType) as Controller;
            }
            catch (StructureMapException exception)
            {
                Debug.WriteLine(ObjectFactory.WhatDoIHave());
                throw;
            }
        }
    }

Контроллер

частный IBabyRepository _babyReposoitory;{

  public BabyController(IBabyRepository babyRepository)
  {
      _babyReposoitory = babyRepository;
  }

Класс пытается DI / Ioc

public class BabyRepository : IBabyRepository, IRepository<Baby>, IRegistar
{
    Just a Default constructor here();
    code...
}

Ошибка:

Код исключения StructureMap:202 Не определен экземпляр по умолчанию для PluginFamily Domain.Repository.IBabyRepository, Домен, Версия = 1.0.0.0, Культура = нейтральный, PublicKeyToken = ноль

Me

Что яделать неправильно?

1 Ответ

0 голосов
/ 08 февраля 2011

Вы не говорите StructureMap, как создать BabyRepository.

Я думаю, что ваше сканирование должно быть примерно таким:

        Scan(y =>
        {
            y.AssemblyContainingType<IRegistar>();
            y.Assembly(Assembly.GetExecutingAssembly().FullName);
            y.With(new RepositoryScanner());
        })

Затем нужно кодировать пользовательский RepositoryScanner:

public class RepositoryScanner : IRegistrationConvention
{
    public void Process(Type type, Registry registry)
    {
        if (type.BaseType == null) return;

        if (type.GetInterface(typeof(IRepository).Name) != null)
        {
            var name = type.Name;

            registry
               .For<IRepository>()
               .AddInstances(y => y.Instance(new ConfiguredInstance(type).Named(name)));
        }
    }
}
...