MVC Unity DI Setter Метод Проблема - PullRequest
0 голосов
/ 10 ноября 2010

Я пару дней читал об Unity в MVC, и я пытался заставить это работать - надеясь, что вы, ребята, можете помочь.

Я настроил Unity в путиздесь описан , который, судя по обширному поиску, кажется достаточно распространенным.Я, вероятно, могу подтвердить, что эта настройка работает, так как на моем домашнем контроллере я могу заставить этот DI работать нормально:

public class HomeController : Controller
{
    [Dependency]
    public IRepository repo { get; set; }

    public ActionResult Index()
    {
        string message = repo.GetMessage();

        ViewData["OUT"] = message;

        return View();
    }
}

Однако у меня есть класс ("Контакт"), который по разным причинам также нуждается вдоступ к методам репозитория, следовательно, связь и требование для DI.Так что в классе у меня есть свойство [Dependency], как и выше.Так, например, у меня есть следующий код:

public partial class Contact
{
    [Dependency]
    public IRepository repo { get; set; }

    public string CoupledProperty
    {
        get
        {
            return repo.GetCoupledProperty();
        }
    }

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

public class HomeController : Controller
{
    [Dependency]
    public IRepository repo { get; set; }

    public ActionResult Index()
    {
        Contact contact = repo.GetContact(1);
        string message = contact.CoupledProperty;

        ViewData["OUT"] = message;

        return View();
    }
}

, я получу объектошибка неинстанцированного выделения строки кода в классе Contact, где CoupledProperty пытается получить доступ к хранилищу.И, конечно же, замена свойства Dependency в классе Contact для жестко закодированного объекта хранилища работает правильно.

Кто-нибудь может увидеть, что здесь происходит не так?

Cheers,

Tim.

РЕДАКТИРОВАТЬ:

Метод GetContact (int) в хранилище:

public Contact GetContact(int id)
{
    return db.Contacts.SingleOrDefault(c => c.ContactID == id);
}

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Как выглядит GetContact(int) метод в вашей реализации репозитория?Использует ли он Unity для создания контакта?Я подозреваю, что это не так.

0 голосов
/ 10 ноября 2010

Я бы посоветовал вам написать несколько модульных тестов вместе со всем этим кодом для постоянного тестирования и проверки написанного вами кода.Помимо предложения StriplingWarrior, я бы также порекомендовал вам проверить соединение с DI Container.

0 голосов
/ 10 ноября 2010

Вы можете разрешить его с помощью DependencyResolver, если это используемый вами преобразователь.

repo = DependencyResolver.Current.GetService<IRepository>();
...