Я подключаю инъекцию зависимостей Autofac в своем веб-приложении ASP.NET MVC 5 с использованием промежуточного программного обеспечения OWIN (так что используйте startup.cs вместо global.asax) и пытаюсь использовать вложение свойств в установите общедоступную переменную в контроллере.Введенное значение свойства имеет значение null в конструкторе
Я играю с инъекцией свойств, чтобы Autofac автоматически установил свойство Test в LoginController.
public interface ITest
{
string TestMethod();
}
public class Test : ITest
{
public string TestMethod()
{
return "Hello world!";
}
}
public class LoginController : Controller
{
public ITest Test { get; set; }
public LoginController()
{
var aaa = Test.TestMethod();
// Do other stuff...
}
}
Вот как выглядит мой startup.cs. Я играю вокруг, поэтому некоторые из этого кода могут не понадобиться (или вызвать мою проблему?).
public class Startup
{
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
builder.RegisterType<Test>().As<ITest>().SingleInstance();
builder.Register(c => new Test()).As<ITest>().InstancePerDependency();
builder.RegisterType<ITest>().PropertiesAutowired();
builder.RegisterType<LoginController>().PropertiesAutowired();
builder.RegisterModelBinderProvider();
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
app.UseAutofacMiddleware(container);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// Some other stuff...
}
}
Таким образом, общедоступное свойство «Test» всегда имеет значение null и, следовательно, прерывает выполнение.
Любые идеи, что может быть моей проблемой? Спасибо заранее за вашу помощь! :)
Возможный дубликат [Как использовать вложение свойств с помощью AutoFac?] (Http://stackoverflow.com/questions/15600440/how-to-use-property-injection-with-autofac) – Steve
Я думаю, что у вас есть регистрации неправильного пути. Контроллеру требуется «PropertiesAutowired», а не зависимость. – Steve
Вам либо нужно передать объект Test в конструктор, либо не использовать этот объект внутри конструктора. Свойства не могут быть назначены до выполнения конструктора. – trailmax