我使用溫莎與ASP.NET MVC4
和我已經寫了一個自定義RoleProvider
圍繞遺留安全框架。我需要將連接字符串和文件路徑注入提供程序,以便我可以將這些提供給傳統框架,但是當我使用AuthorizeAttribute
時,我意識到我不知道如何攔截提供程序的構造以便注入這些值。如何使用Windsor將依賴注入到自定義RoleProvider中?
如果它有助於包括代碼,我的角色提供有這種構造的:
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider(string connectionString, string logPath)
{
LegacySecurity.ConnectionString = connectionString;
LegacySecurity.LogPath = logPath;
}
[Method overrides go here...]
}
我AppSettingsConvention
看起來是這樣的:
public class AppSettingsConvention : ISubDependencyResolver
{
public bool CanResolve(CreationContext context,
ISubDependencyResolver contextHandlerResolver,
ComponentModel model,
DependencyModel dependency)
{
return ConfigurationManager.AppSettings.AllKeys.Contains(dependency.DependencyKey)
&& TypeDescriptor.GetConverter(dependency.TargetType).CanConvertFrom(typeof (string));
}
public object Resolve(CreationContext context,
ISubDependencyResolver contextHandlerResolver,
ComponentModel model,
DependencyModel dependency)
{
return TypeDescriptor.GetConverter(dependency.TargetType)
.ConvertFrom(ConfigurationManager.AppSettings[dependency.DependencyKey]);
}
}
(從這裏原來:http://blog.ploeh.dk/2012/07/02/PrimitiveDependencies/)
我希望我可以以某種方式替換其中一項服務,就像我將HttpControllerActivator
替換爲使用依賴項注入一樣與ApiController
s。
這可能嗎?還是我需要看看提供這些依賴關係的另一種方式?
看看這個相關的問題:https://stackoverflow.com/questions/15410575/custom-membership-provider-and-unity-injection – Steven
對不起,我真的不知道這是如何幫助我直接。它給了我實現我自己的'IDependencyResolver'的想法,這可能工作,我猜? – adhocgeek
問題是,你不能在你的'CustomRoleProvider'上進行依賴注入(就像你無法使用成員提供者一樣),因爲它是基於某些XML配置創建該類型的.NET框架。所以訣竅是創建一個你用XML配置的外觀,它解析了容器中的'真實'提供者。這基本上是相關問題描述的內容。 – Steven