Ошибка StructureMap, разрешающая зависимость Open Generic - PullRequest
0 голосов
/ 28 февраля 2011

Итак, я подключил мой открытый универсальный плагин в StructureMap следующим образом:

scan.ConnectImplementationsToTypesClosing(typeof(IRepository<>));

Но все же получаю страшный

Нет экземпляра по умолчанию, определенного для PluginFamily KharaSoft.Utils.IRepository`1 [[KharaSoft.App.Core.DomainObject, KharaSoft.App.Core, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]

Я отлаживаю после инициализации контейнера иубедитесь, что у него действительно зарегистрирован экземпляр RepositoryBase <>, поэтому он знает, что я хочу сделать, но не закрывает его для меня.Я что-то упускаю здесь?

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Трудно тренироваться, не видя полного кода сканирования или макета вашего проекта.Есть несколько стандартных шагов, которые я обычно выполняю, когда у меня возникает эта проблема.

Убедитесь, что у вас есть

scan.WithDefaultConventions()

Убедитесь, что сборка, содержащая классы репозитория, включена в сканирование:

x.AssemblyContainingType(typeof(UserRepository)); 

Убедитесь, что у вас есть правильные реализации на месте:

IRepository<User>

имеет соответствие

Repository<User>

Надеемся, что что-то из этого совета поможет вам найти проблему.

0 голосов
/ 01 марта 2011

Так что я не уверен, что это «лучший» способ, но я обнаружил, что это работает. Я должен был явно зарегистрировать открытую реализацию плагина следующим образом:

ObjectFactory.Initialize(
  x =>
    {
      x.Scan(scan =>
        {
          scan.Assembly(typeof (IRepository<>).Assembly);
          scan.WithDefaultConventions();
        });
      x.For(typeof (IRepository<>)).Use(typeof (RepositoryBase<>));
      x.For<IUnitOfWork>().Use<MyDataContext>();
    });
return ObjectFactory.Container;

Видите, я не хотел закрывать универсальный файл напрямую во всех случаях. Так что теперь мой контроллер MVC может принимать зависимость примерно так

public PlayerController(IRepository<Player> players)
{
  Players = players;
}

И StructureMap закроет зависимость экземпляром RepositoryBase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...