servicestack,inversion-of-control,unity-container,Dependency Injection,servicestack,Inversion Of Control,Unity Container" /> servicestack,inversion-of-control,unity-container,Dependency Injection,servicestack,Inversion Of Control,Unity Container" />

Dependency injection 寄存器自动连线:统一模拟?

Dependency injection 寄存器自动连线:统一模拟?,dependency-injection,servicestack,inversion-of-control,unity-container,Dependency Injection,servicestack,Inversion Of Control,Unity Container,我目前正在将一个使用ServiceStack的DI的项目转换为Unity。我目前正忙于ServiceStack的RegisterAutoWired方法,该方法注册一个具体的类 container.RegisterAutoWired<MyClass>().ReusedWithin(ReuseScope.Request); container.RegisterAutoWired().ReusedWithin(ReuseScope.Request); 我应该使用IUnityContai

我目前正在将一个使用ServiceStack的DI的项目转换为Unity。我目前正忙于ServiceStack的RegisterAutoWired方法,该方法注册一个具体的类

container.RegisterAutoWired<MyClass>().ReusedWithin(ReuseScope.Request);
container.RegisterAutoWired().ReusedWithin(ReuseScope.Request);

我应该使用IUnityContainer中的什么方法来实现相同的结果?

只需使用
IUnityContainer.RegisterType()

您实际上不需要注册具体的类。Unity将为您创建一个新的具体类(但它默认选择参数最多的构造函数)。如果需要指定特定的构造函数,或者需要设置特殊的生存期,则可能需要注册它

unityContainer.RegisterType<MyClass>(
    new ContainerControlledLifetimeManager(), // Singleton
    new InjectionConstructor(myConstructorParameter1, ...);
这本书很有帮助

var myClassInstance = new MyClass();
unityContainer.RegisterInstance(myClassInstance);

unityContainer.RegisterType<MyClass>(
    new InjectionFactory(c => new MyClass()));