我一直在瀏覽Autofac的示例和文檔,並且無法看到使其工作。使用Autofac進行屬性注入不起作用
我們有一個輔助類,Core.Helpers.Tokens
與建立這樣的特性:
namespace Core.Helpers
{
public static class Tokens
{
private static IConfigurationManager ConfigurationManager;
public static string GetToken()
{
var sessionTokenName = ConfigurationManager.GetAppSetting("SessionTokenName");
return (string) HttpContext.Current.Session[sessionTokenName];
}
}
}
配置是這樣設計的:
namespace Core.Config
{
public interface IConfigurationManager
{
//...
}
public class WebConfigConfigurationManager : IConfigurationManager
{
//...
}
}
在我們的MVC的Web應用程序(其中引用和用途Core.Helpers
,Startup.cs
我試圖爲房地產注入註冊IConfigurationManager
。
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
// REGISTER CONTROLLERS SO DEPENDENCIES ARE CONSTRUCTOR INJECTED
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterModule<AutofacWebTypesModule>();
builder.RegisterFilterProvider();
builder.RegisterType<WebConfigConfigurationManager>().As<IConfigurationManager>().PropertiesAutowired();
RegisterTypes(builder);
// BUILD THE CONTAINER
var container = builder.Build();
var webConfig = container.Resolve<IConfigurationManager>();
// REPLACE THE MVC DEPENDENCY RESOLVER WITH AUTOFAC
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// REGISTER WITH OWIN
app.UseAutofacMiddleware(container);
app.UseAutofacMvc();
}
當Web代碼調用GetToken時,ConfigurationManager
爲空。我錯過了什麼?
好的,我可以看到它需要公開。但是你不能在靜態類中聲明實例成員。 –
爲什麼第三名會是最差的? –
第三種解決方案實質上是放棄DI並降級使用Service Locator,它有很多缺點,有些甚至認爲它是反模式。 https://stackoverflow.com/questions/1557781/whats-the-difference-between-the-dependency-injection-and-service-locator-patte – Loonquawl