Click here to Skip to main content
15,896,730 members
Articles / Programming Languages / C#

Having fun with Griffin.Container

Rate me:
Please Sign up or sign in to vote.
5.00/5 (4 votes)
16 Aug 2012CPOL13 min read 33.2K   166   13  
An inversion of control container with modules, decorators, commands, domain events and more.
using System;
using System.Collections.Generic;
using System.Linq;
using Griffin.Container;
using Griffin.Container.DomainEvents;

namespace Example7
{
    [Component(Lifetime = Lifetime.Scoped)]
    public class UserRepository : IUserQueries, IUserStorage
    {
        private readonly List<User> _fakeDb = new List<User>();

        #region IUserQueries Members

        public User Get(string id)
        {
            if (id == null) throw new ArgumentNullException("id");

            return _fakeDb.SingleOrDefault(x => x.Id == id);
        }

        #endregion

        #region IUserStorage Members

        public User Create(string userName)
        {
            if (userName == null) throw new ArgumentNullException("userName");

            var user = new User(_fakeDb.Count.ToString());
            user.UserName = userName;
            _fakeDb.Add(user);

            DomainEvent.Publish(new UserCreated(user.Id));
            return user;
        }

        public void Save(User user)
        {
            if (user == null) throw new ArgumentNullException("user");

            var dbUser = Get(user.Id);
            if (dbUser == null)
                _fakeDb.Add(user);

            //assume that it's in our list otherwise.
            // remember: fakedb ;)
        }

        public void Delete(User user)
        {
            if (user == null) throw new ArgumentNullException("user");

            _fakeDb.RemoveAll(x => x.Id == user.Id);
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Founder 1TCompany AB
Sweden Sweden

Comments and Discussions