私は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];
}
}
}
設定は次のように設計されています。私たちのMVCのWebアプリ(これは参照および使用において
namespace Core.Config
{
public interface IConfigurationManager
{
//...
}
public class WebConfigConfigurationManager : IConfigurationManager
{
//...
}
}
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
はnullです。私は何が欠けていますか?
さて、私は公開する必要があることがわかります。しかし、インスタンスメンバーを静的クラスで宣言することはできません。 –
第3位はなぜ最悪ですか? –
第3の解決策は、基本的にDIを諦め、Service Locatorを使用することにダウングレードします。これには多くの欠点があります。 https://stackoverflow.com/questions/1557781/whats-the-difference-between-the-dependency-injection-and-service-locator-patte – Loonquawl