C# 统一。自动注册??基于公约的登记统一
我的代码如下C# 统一。自动注册??基于公约的登记统一,c#,.net,unity-container,design-patterns,C#,.net,Unity Container,Design Patterns,我的代码如下 IUnityContainer container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom(typeof(Test).Assembly.Location) .LoadAssemblyFrom(typeof(ITest).Assembly.Location) .ApplyAutoRegistration(); 这是我的第一个问题 我不确定在此是否正确使用了L
IUnityContainer container = new UnityContainer();
container
.ConfigureAutoRegistration()
.LoadAssemblyFrom(typeof(Test).Assembly.Location)
.LoadAssemblyFrom(typeof(ITest).Assembly.Location)
.ApplyAutoRegistration();
这是我的第一个问题
我不确定在此是否正确使用了LoadAssemblyFrom方法:
ITest test = container.Resolve<ITest>();
ITest test=container.Resolve();
当我试图编译时,我得到异常“ResolutionFailedException”
我做错了什么
提前感谢您的时间。看来您需要的是:
container.ConfigureAutoRegistration()
.LoadAssemblyFrom(typeof(ITest).Assembly.Location)
.LoadAssemblyFrom(typeof(Test).Assembly.Location)
.Include(If.ImplementsITypeName, Then.Register())
.ApplyAutoRegistration();
这将告诉Unity.AutoRegistration注册所有类型,其中有一个名称相同的接口,前缀为I。这里是一个完整的工作控制台示例,演示如何按照约定设置Unity进行注册,然后将控制转移到依赖项注入世界中。您必须添加
Unity
NuGet包才能使其正常工作
使用Unity v3.5和VS 2012进行测试
#region
using System;
using Microsoft.Practices.Unity;
#endregion
namespace Demo___Unity
{
internal class Program
{
private static void Main(string[] args)
{
using (var container = new UnityContainer())
{
// Manual method.
//container.RegisterType<IEntryPoint, EntryPoint>();
//container.RegisterType<IInjected, Injected>();
// Set up registration by convention.
// http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx
container.RegisterTypes(
AllClasses.FromAssembliesInBasePath(),
WithMappings.FromMatchingInterface,
WithName.Default,
WithLifetime.ContainerControlled);
var controller = container.Resolve<IEntryPoint>();
controller.Main();
}
}
}
public interface IEntryPoint
{
string Name { get; set; }
void Main();
}
public class EntryPoint : IEntryPoint
{
private readonly IInjected Injected;
public EntryPoint(IInjected injected)
{
Injected = injected;
}
public void Main()
{
Console.Write("Hello, world!\n");
Injected.SubMain();
Injected2.SubMain();
Console.Write("[any key to continue]");
Console.ReadKey();
}
// Demonstrates property injection.
[Dependency]
public IInjected Injected2 { get; set; }
public string Name { get; set; }
}
public interface IInjected
{
void SubMain();
}
public class Injected : IInjected
{
public void SubMain()
{
Console.Write("Hello, sub world!\n");
}
public string Name { get; set; }
}
}
#地区
使用制度;
使用Microsoft.Practices.Unity;
#端区
名称空间演示统一
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
使用(var container=new UnityContainer())
{
//手动方法。
//container.RegisterType();
//container.RegisterType();
//按惯例设立注册。
// http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx
container.RegisterTypes(
AllClasses.FromAssembliesInBasePath(),
使用Mappings.FromMatchingInterface,
WithName.Default,
使用寿命。集装箱受控);
var controller=container.Resolve();
controller.Main();
}
}
}
公共接口IEntryPoint
{
字符串名称{get;set;}
void Main();
}
公共类入口点:IEntryPoint
{
私有只读注入;
公共入口点(注入式)
{
注入=注入;
}
公共图书馆
{
控制台。编写(“你好,世界!\n”);
submin();
注射2.子蛋白();
控制台。写入(“[任何要继续的键]”);
Console.ReadKey();
}
//演示属性注入。
[依赖性]
公共注入注入2{get;set;}
公共字符串名称{get;set;}
}
公共接口输入
{
空子蛋白();
}
注入的公共类:IInjected
{
公共空分
{
控制台。写入(“你好,子世界!\n”);
}
公共字符串名称{get;set;}
}
}