Skip to content

gsh434541340/Farseer.Net.DI

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

官方地址:http://www.cnblogs.com/steden/ 官方QQ群:116228666 (Farseer.net开源框架交流) 请注明:博客园

Farseer.Net.DI

Farseer.Net.DI是一个轻量级、高性能的IoC容器,用于解耦和管理类之间的依赖关系。

######使用 /// 初始化容器 IFarseerContainer container = new FarseerContainer();

 ///  创建注册器
 IDependencyRegister register = container.CreateRegister();
 
 ///  注册类型
 register.RegisterType<IUserRepository, UserRepository>();
 
 ///  创建解析器
 using (IDependencyResolver resolver = container.CreateResolver())
 {
 
     ///  解析类型
     IUserRepository repository = resolver.Resolve<IUserRepository>();
 }

######依赖注册

///  使用类型注册
register.RegisterType<IUserRepository, UserRepository>();

///  使用类型实例注册
register.RegisterInstance<IUserRepository>(new UserRepository());

///  使用委托注册
register.RegisterDelegate<IUserRepository, UserRepository>(
    resolver =>
    {
        return new UserRepository();
    });
    
///  注册指定程序集包含的所有类型
register.RegisterAssembly(Assembly.GetExecutingAssembly());

///  注册指定程序集中实现特定接口的所有类型
register.RegisterAssembly<IDependency>(Assembly.GetExecutingAssembly());

///  注册指定程序集中遵循命名约定的所有类型
register.RegisterAssembly(Assembly.GetExecutingAssembly(), "Service");

///  注册程序集中所有符合过滤条件的类型
register.RegisterAssembly(Assembly.GetExecutingAssembly(), type => type.IsClass);

######生命周期

///  每次解析创建一个新的实例
register.RegisterType<IUserRepository, UserRepository>().AsTransientLifetime();

///  在容器中为单例
register.RegisterType<IUserRepository, UserRepository>().AsSingletonLifetime();

///  在同一作用域中为单例
register.RegisterType<IUserRepository, UserRepository>().AsScopedLifetime();

######依赖解析

///  解析实现特定接口的类型
IUserRepository repository = resolver.Resolve<IUserRepository>();

///  解析实现特定接口的所有类型
IEnumerable<IDependency> dependencys = resolver.ResolveAll<IDependency>();

######作用域

using (IDependencyResolver resolver = container.CreateResolver())
{
    ///  创建作用域解析器
    using (IScopedResolver scoped = resolver.CreateScopedResolver())
    {
        IUserRepository repository = scoped.Resolve<IUserRepository>();
    }
}

######自动属性注入

public class UserRepository : IUserRepository
{
    public ILogger Logger { get; set; }
}

///  作为自动注入的属性
register.RegisterType<ILogger, Logger>().AsPropertyDependency();

register.RegisterType<IUserRepository, UserRepository>();
using (IDependencyResolver resolver = container.CreateResolver())
{
    ///  解析依赖,属性自动注入
    IUserRepository repository = resolver.Resolve<IUserRepository>();
}

######忽略自动属性

 public class UserRepository : IUserRepository
 {
    ///IgnoreDependency标记的属性将不会被自动注入
    [IgnoreDependency]
    public ILogger Logger { get; set; }
 }

About

提供.Net平台下的IOC、DI解决方案

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%