свойство базового класса autofac равно нулю - PullRequest
1 голос
/ 15 февраля 2012

Вот моя установка с Asp.Net Mvc 3:

public abstract class BaseProvider
{
    protected ICache Cache;
}

public interface ICache
{
    void Add(string key, object data);
    void Remove(string key);
    ...
}

public class MyCache : ICache
{
    private static MemoryCache cache = MemoryCache.Default;
    void Add(string key, object data)
    {
    ...
    }
}

public interface IEmployeeProvider
{
    IEnumerable<Employee> GetEmployees(string department);
}

public class EmployeeProvider:BaseProvider,IEmployeeProvider
{
    public IEnumerable<Employee> GetEmployees(string department)
    {
         **if (Cache.Get("employees_"+department)!=null)**

    }
}

Помеченная строка выдает ошибку о том, что Cache равен нулю. Я пытался зарегистрировать базовый класс как тип, но, думаю, это неправильно. Моя настройка Autofac выглядит следующим образом:

builder.Register(r => new EmployeeProvider()).As<IEmployeeProvider>().InstancePerHttpRequest();
builder.Register(r => new MyCache()).As<ICache>().InstancePerHttpRequest();
builder.RegisterType<BaseProvider>().PropertiesAutowired();

Чего мне не хватает?

1 Ответ

1 голос
/ 15 февраля 2012

Вам следует либо зарегистрировать EmployeeProvider с помощью PropertiesAutowired(), либо отсканировать сборку для каждого класса, который наследуется от BaseProvider.

Первая регистрация забывает PropertiesAutowired(), третья строка забывает EmployeeProvider.

...