我有一個麻煩的Windows服務(see this question),我正在考慮創建一個自定義作用域工廠,以在每次服務打勾時生成一個新作用域。在內核中註冊Ninject內核可以嗎?
我打算把內核注入到這個工廠,這樣它就可以在每次打勾時爲服務返回一個新的作用域,並在每次打勾後銷燬/釋放作用域。
爲方便起見,我打算將此添加到我的RegisterServices()方法:
kernel.Bind<IKernel>().ToConstant(kernel);
而且我的自定義範圍廠應該是這樣的:
public class CustomScopeFactory : ICustomScopeFactory
{
private readonly IKernel kernel;
public CustomScopeFactory(IKernel kernel)
{
this.kernel = kernel;
}
public ICustomScope CreateScope()
{
return kernel.Get<ICustomScope>();
}
public void DisposeScope(ICustomScope scope)
{
kernel.Release(scope);
}
}
我不會通常考慮將內核註冊到內核或注入內核,但在這種情況下,我認爲這是一個有效的用例。
那麼,在內核本身註冊Ninject內核可以嗎?任何想法或替代品將不勝感激。
我不認爲這是一個正常的_Service Locator_ ..因爲你是注射容器本身。你的選擇是注入一個'IDependencyResolver'或類似的東西..使它獨立於容器(如果這就是你的目標)。 –
除了'IKernel'接口,您可以使用'IResolutionRoot'接口。我認爲它已經被註冊了,所以你甚至不需要爲它創建一個綁定。 – BatteryBackupUnit
@BatteryBackupUnit使用''''IResolutionRoot''''代替''''IKernel''''有什麼好處? –