2
Unity將解析類,即使它們未在容器中註冊。是否有可能更改容器配置,因此類應該明確註冊才能解決?防止解析未註冊的類
Unity將解析類,即使它們未在容器中註冊。是否有可能更改容器配置,因此類應該明確註冊才能解決?防止解析未註冊的類
您可以創建自定義生成器的策略,並檢查是否型註冊在容器:
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.AddNewExtension<FactoryUnityExtension>();
try
{
container.Resolve<Program>();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
container.RegisterType<Program>();
var v = container.Resolve<Program>();
Console.WriteLine(v);
}
}
public class CustomFactoryBuildStrategy : BuilderStrategy
{
private ExtensionContext baseContext;
public CustomFactoryBuildStrategy(ExtensionContext baseContext)
{
this.baseContext = baseContext;
}
public override void PreBuildUp(IBuilderContext context)
{
var key = (NamedTypeBuildKey)context.OriginalBuildKey;
if (baseContext.Container.Registrations.All(o => o.RegisteredType != key.Type))
{
throw new InvalidOperationException();
}
}
}
public class FactoryUnityExtension : UnityContainerExtension
{
private CustomFactoryBuildStrategy strategy;
protected override void Initialize()
{
this.strategy = new CustomFactoryBuildStrategy(Context);
Context.Strategies.Add(strategy, UnityBuildStage.PreCreation);
}
}
@ArturShamsutdinov你嘗試這個解決方案? – Backs