Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Unity按名称注册多个类型?_C#_Unity Container - Fatal编程技术网

C# 如何使用Unity按名称注册多个类型?

C# 如何使用Unity按名称注册多个类型?,c#,unity-container,C#,Unity Container,我是Unity的新手(来自温莎城堡),所以我知道我想用依赖性注射做什么,我只是不知道如何用Unity来做 如能提供指导,将不胜感激 还有一些类似的实现: public class Strategy { ... etc } public class FooStrategy : Strategy { ... etc } public class BarStrategy : Strategy { ... etc } container.RegisterType<IStrat

我是Unity的新手(来自温莎城堡),所以我知道我想用依赖性注射做什么,我只是不知道如何用Unity来做

如能提供指导,将不胜感激

还有一些类似的实现:

public class Strategy
{
... etc
}

public class FooStrategy : Strategy
{
... etc    
}

public class BarStrategy : Strategy
{
... etc    
}
container.RegisterType<IStrategy, FooStrategy>("FooStrategy");
container.RegisterType<IStrategy, BarStrategy>("BarStrategy");

var foo = container.Resolve<IStrategy>("FooStrategy");
Assert.IsTrue(foo.GetType() == typeof (FooStrategy));
目前我可以这样一个一个注册:

public class Strategy
{
... etc
}

public class FooStrategy : Strategy
{
... etc    
}

public class BarStrategy : Strategy
{
... etc    
}
container.RegisterType<IStrategy, FooStrategy>("FooStrategy");
container.RegisterType<IStrategy, BarStrategy>("BarStrategy");

var foo = container.Resolve<IStrategy>("FooStrategy");
Assert.IsTrue(foo.GetType() == typeof (FooStrategy));
container.RegisterType(“FooStrategy”);
container.RegisterType(“BarStrategy”);
var foo=container.Resolve(“FooStrategy”);
Assert.IsTrue(foo.GetType()==typeof(FooStrategy));
我怎样才能更有效地做到这一点?我想按实现名称注册所有实现IStStrategy的类型

        container.RegisterTypes(AllClasses.FromLoadedAssemblies().Where(t => typeof(Strategy).IsAssignableFrom(t)));
在默认情况下,容器中使用的
名称
似乎是实现名称,因此它最终非常简单


我唯一需要改变的是使用POCO作为基本类型,而不是接口。

你想要自动获取所有实现并在容器中注册它们吗?是的,所以我想说
注册所有实现IStrategy的类型,而不是像上面那样逐个注册我的类型,对于具体类型的名称
,结果将与上述相同\