我开始用Unity做越来越多的工作.我注意到解析方法需要一个PARAMS参数ResolverOverride.
有人可以给我一个例子,我可以如何使用ResolverOverride或指向我一些其他来源,我可以得到更多的线索.
我终于忍受了Dependency Injection(早就应该); 我开始玩Unity并遇到战略模式的问题.我可以使用容器向我返回基于名称的策略的特定实现,但我没有看到我应该如何在上下文中获得正确的策略.
让我们举一个简单的例子说明:上下文是一辆汽车,它有一个IEngine(策略),有2个实现,FastEngine和SlowEngine.代码将沿着这些方向看:
public interface IEngine
{
double MaxSpeed
{
get;
}
}
internal class FastEngine:IEngine
{
public double MaxSpeed
{
get
{
return 100d;
}
}
}
internal class SlowEngine:IEngine
{
public double MaxSpeed
{
get
{
return 10d;
}
}
}
public class Car
{
private IEngine engine;
public double MaximumSpeed
{
get
{
return this.engine.MaxSpeed;
}
}
public Car(IEngine engine)
{
this.engine = engine;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题如下:我应该如何实例化快车或慢车?我可以使用容器为我提供每个实现,我可以设置一个"默认"实现来使用:
IUnityContainer container = new UnityContainer();
container.RegisterType<IEngine, FastEngine>();
container.RegisterType<IEngine, FastEngine>("Fast"); …Run Code Online (Sandbox Code Playgroud) c# dependency-injection ioc-container unity-container strategy-pattern
我正在使用Prism,它也是很好的Unity IoC容器.我是这个概念的新手,所以我还没有全力以赴.我现在要做的是使用IoC容器创建一个对象,但也传递一个额外的参数.请允许我用一个例子解释..:
我有一个接受命令对象的类.这是在IoC容器中注册的,因此它可以很好地处理它:
public class Person
{
public Person(IApplicationCommands commands) { .. }
..
}
Person person = _container.Resolve<Person>();
Run Code Online (Sandbox Code Playgroud)
现在 - 我想传递另一个论点 - 例如人的名字.但是,我仍然希望使用IoC容器来处理解析,从而从IoC容器中获取其他参数.但是将名称作为"自定义"参数传递.可以这样做吗?
public class Person
{
public Person(IApplicationCommands commands, string name) { .. }
..
}
string name = "John";
Person person = _container.Resolve<Person>(name); // ....??
Run Code Online (Sandbox Code Playgroud)
这个例子似乎不起作用,但有没有办法让它工作?或者Unity IoC容器是否要求在调用Resolve之前在容器中注册所有参数?
我需要帮助.我使用Unity作为我的容器,我想在构造函数中注入两个相同类型的不同实例.
class Example
{
Example(IQueue receiveQueue, IQueue sendQueue) {}
}
Run Code Online (Sandbox Code Playgroud)
....和IQueue在我的MessageQueue类中实现....
class MessageQueue : IQueue
{
MessageQueue(string path) {}
}
Run Code Online (Sandbox Code Playgroud)
如何将两个不同的MessageQueue实例注入我的Example类?要使用不同的路径创建的每个MessageQueue实例.
有没有办法使用Unity框架将整数作为参数传递给构造函数或已解析的对象?
伪码..
IService svc = Container.Resolve<ConcreteService>()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,混凝土服务将是这样的......
public class ConcreteService
{
public ConcreteService(int val)
{
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我需要在xml配置中执行此操作,而不是在代码中执行此操作.
提前致谢.