C# 寄存器依赖统一
我只是想问一下,是否有一种方法可以使用unity以最简单的方式注册依赖项C# 寄存器依赖统一,c#,dependency-injection,dependencies,unity-container,C#,Dependency Injection,Dependencies,Unity Container,我只是想问一下,是否有一种方法可以使用unity以最简单的方式注册依赖项 public class Module : IModule { IUnityContainer _container; IRegionManager _regionManager; public Module (IUnityContainer container, IRegionManager regionManager) { _contai
public class Module : IModule
{
IUnityContainer _container;
IRegionManager _regionManager;
public Module (IUnityContainer container, IRegionManager regionManager)
{
_container = container;
_regionManager = regionManager;
}
public void initialize()
{
IRegion region = _regionManager.Regions[RegionNames.ContentRegion];
_container.RegisterType<"InterfaceHERE", "CLASSHERE">();
}
我有30-40个类和接口,我不想把它编码成多余的。有没有办法用最简单的形式编写代码?比如获取所有类并创建一个循环并注册它
谢谢 自Unity 3.0以来,您可以使用约定在容器中注册实现。请,代码如下所示。您必须指定要自动注册的类型,如何选择映射,决定它们的名称和使用寿命
using (var container = new UnityContainer())
{
container.RegisterTypes(
AllClasses.FromLoadedAssemblies(),
WithMapping.MatchingInterface,
WithName.Default,
WithLifetime.ContainerControlled);
}
如果您使用的是Unity 2.0,那么您必须使用其他软件包,请参阅nuget。使用此软件包,您可以扫描实现并自动注册它们,如下所示,有关详细信息,请查看项目文档:
public class FooRegistry : UnityRegistry
{
(...)
Scan(scan =>
{
scan.AssembliesInBaseDirectory();
scan.ForRegistries();
scan.With<FirstInterfaceConvention>();
scan.With<AddAllConvention>()
.TypesImplementing<IHaveManyImplementations>();
scan.With<SetAllPropertiesConvention>().OfType<ILogger>();
scan.ExcludeType<FooService>();
});
}
如果您使用的是服务定位器模式,而不是实际的IoC,那么您可以使用公共构造函数对任何类型调用Resolve,Unity将发现它,而无需事先注册它。希望你真的在使用IoC。我认为它适用于v3.5及更高版本。我只有2.0好的,我更新了我的答案以涵盖Unity 2.0,祝你好运!如果我的帖子有帮助,请将其标记为答案,它将帮助其他人。安装unityconfiguration后,仍然找不到RegisterTypes扩展名:@EnricoDomingo RegisterTypes仅适用于Unity>=3.0,它是在那里构建的。对于UnityConfiguration包,流程有点不同,我已经从他们的文档中添加了代码,请查看他们的github。谢谢@Michałołnieruk!