2014-11-04 176 views
0

我有基地controlller我嘗試屬性注射,但沒有工作...Autofac財產注射

public class BaseController : Controller 
{ 
    public ILoggingService loggingService { get; set; } 

    public BaseController() 
    { 

    } 
} 

這是我Autofac配置...

var builder = new ContainerBuilder(); 

// builder.Register(c => new BaseController { loggingService = c.Resolve<ILoggingService>() }); 
builder.RegisterControllers(Assembly.GetExecutingAssembly()) 
        .PropertiesAutowired(); 

builder.Register(c => new BaseController()).OnActivated(e => 
{ 
    e.Instance.loggingService = e.Context.Resolve<ILoggingService>(); 
}); 
builder.RegisterAssemblyTypes(Assembly.Load("Aizen.Services")) 
        .Where(t => t.Name.EndsWith("Service")) 
        .AsImplementedInterfaces() 
        .InstancePerRequest(); 
+0

,則不應使用屬性注入擺在首位。建築師注入是建議的常見做法。 Autofac將支持開箱即用。 – Steven 2014-11-04 10:13:50

回答

0

您還沒有註冊一個你的ILoggingService接口的具體類型。沒有這一點,Autofac不知道它真正需要設置你的財產。

添加這樣的事情(當然真正的對象替換):

builder.RegisterType<YourLoggingServiceGoesHere>().As<ILoggingService>(); 
+0

我有。 ıforgat在這裏添加它。謝謝回答..但我擁有它。 – user3809557 2014-11-04 10:00:16

+0

那麼'Aizen.Services'程序集包含'ILoggingService'的實現? – DavidG 2014-11-04 10:11:08

+0

是的..我嘗試單一它 - builder.RegisterType ()。作爲(); – user3809557 2014-11-04 11:16:39

0

你可以試試這個解決方案:

builder.Register(c => new BaseController { loggingService = c.Resolve<ILoggingService>() });